[FIR] Remove FirLambdaArgumentExpression
It's not really necessary if the information about if the lambda was a trailing lambda can be directly saved in FirAnonymousFunctionExpression. Removing the FIR node uncovered a couple of bugs (UNINITIALIZED_ENUM_ENTRY, ERROR_IN_CONTRACT_DESCRIPTION) that were caused by assuming that a lambda is always a trailing lambda. #KT-66124
This commit is contained in:
committed by
Space Team
parent
1a5fa8d3f6
commit
03fc0fd381
+3
@@ -24,6 +24,7 @@ abstract class FirAnonymousFunctionExpression : FirExpression() {
|
||||
abstract override val coneTypeOrNull: ConeKotlinType?
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract val anonymousFunction: FirAnonymousFunction
|
||||
abstract val isTrailingLambda: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitAnonymousFunctionExpression(this, data)
|
||||
@@ -36,6 +37,8 @@ abstract class FirAnonymousFunctionExpression : FirExpression() {
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract fun replaceIsTrailingLambda(newIsTrailingLambda: Boolean)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousFunctionExpression
|
||||
|
||||
abstract fun <D> transformAnonymousFunction(transformer: FirTransformer<D>, data: D): FirAnonymousFunctionExpression
|
||||
|
||||
-40
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||
// DO NOT MODIFY IT MANUALLY.
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
/**
|
||||
* Generated from: [org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.lambdaArgumentExpression]
|
||||
*/
|
||||
abstract class FirLambdaArgumentExpression : FirWrappedArgumentExpression() {
|
||||
abstract override val source: KtSourceElement?
|
||||
@UnresolvedExpressionTypeAccess
|
||||
abstract override val coneTypeOrNull: ConeKotlinType?
|
||||
abstract override val annotations: List<FirAnnotation>
|
||||
abstract override val expression: FirExpression
|
||||
abstract override val isSpread: Boolean
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitLambdaArgumentExpression(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E : FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformLambdaArgumentExpression(this, data) as E
|
||||
|
||||
abstract override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?)
|
||||
|
||||
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
|
||||
|
||||
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirLambdaArgumentExpression
|
||||
}
|
||||
-53
@@ -1,53 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||
// DO NOT MODIFY IT MANUALLY.
|
||||
|
||||
@file:Suppress("DuplicatedCode", "unused")
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirLambdaArgumentExpressionImpl
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirLambdaArgumentExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
|
||||
override var source: KtSourceElement? = null
|
||||
override val annotations: MutableList<FirAnnotation> = mutableListOf()
|
||||
lateinit var expression: FirExpression
|
||||
|
||||
override fun build(): FirLambdaArgumentExpression {
|
||||
return FirLambdaArgumentExpressionImpl(
|
||||
source,
|
||||
annotations.toMutableOrEmpty(),
|
||||
expression,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@Deprecated("Modification of 'coneTypeOrNull' has no impact for FirLambdaArgumentExpressionBuilder", level = DeprecationLevel.HIDDEN)
|
||||
override var coneTypeOrNull: ConeKotlinType?
|
||||
get() = throw IllegalStateException()
|
||||
set(_) {
|
||||
throw IllegalStateException()
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildLambdaArgumentExpression(init: FirLambdaArgumentExpressionBuilder.() -> Unit): FirLambdaArgumentExpression {
|
||||
contract {
|
||||
callsInPlace(init, InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return FirLambdaArgumentExpressionBuilder().apply(init).build()
|
||||
}
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
// This file was generated automatically. See compiler/fir/tree/tree-generator/Readme.md.
|
||||
// DO NOT MODIFY IT MANUALLY.
|
||||
|
||||
@file:Suppress("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.fir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.MutableOrEmptyList
|
||||
import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.UnresolvedExpressionTypeAccess
|
||||
import org.jetbrains.kotlin.fir.types.ConeKotlinType
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
import org.jetbrains.kotlin.fir.visitors.transformInplace
|
||||
|
||||
internal class FirLambdaArgumentExpressionImpl(
|
||||
override val source: KtSourceElement?,
|
||||
override var annotations: MutableOrEmptyList<FirAnnotation>,
|
||||
override var expression: FirExpression,
|
||||
) : FirLambdaArgumentExpression() {
|
||||
@OptIn(UnresolvedExpressionTypeAccess::class)
|
||||
override val coneTypeOrNull: ConeKotlinType?
|
||||
get() = expression.coneTypeOrNull
|
||||
override val isSpread: Boolean
|
||||
get() = false
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
annotations.forEach { it.accept(visitor, data) }
|
||||
expression.accept(visitor, data)
|
||||
}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirLambdaArgumentExpressionImpl {
|
||||
transformAnnotations(transformer, data)
|
||||
expression = expression.transform(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirLambdaArgumentExpressionImpl {
|
||||
annotations.transformInplace(transformer, data)
|
||||
return this
|
||||
}
|
||||
|
||||
override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {}
|
||||
|
||||
override fun replaceAnnotations(newAnnotations: List<FirAnnotation>) {
|
||||
annotations = newAnnotations.toMutableOrEmpty()
|
||||
}
|
||||
}
|
||||
@@ -170,9 +170,6 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R =
|
||||
visitWrappedExpression(wrappedArgumentExpression, data)
|
||||
|
||||
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): R =
|
||||
visitWrappedArgumentExpression(lambdaArgumentExpression, data)
|
||||
|
||||
override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): R =
|
||||
visitWrappedArgumentExpression(spreadArgumentExpression, data)
|
||||
|
||||
|
||||
@@ -120,8 +120,6 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression) = visitWrappedExpression(wrappedArgumentExpression)
|
||||
|
||||
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) = visitWrappedArgumentExpression(lambdaArgumentExpression)
|
||||
|
||||
override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression) = visitWrappedArgumentExpression(spreadArgumentExpression)
|
||||
|
||||
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) = visitWrappedArgumentExpression(namedArgumentExpression)
|
||||
|
||||
@@ -923,14 +923,6 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformWrappedArgumentExpression(wrappedArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): FirStatement {
|
||||
return transformElement(lambdaArgumentExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): FirStatement {
|
||||
return transformLambdaArgumentExpression(lambdaArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): FirStatement {
|
||||
return transformElement(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
@@ -359,9 +359,6 @@ abstract class FirVisitor<out R, in D> {
|
||||
open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R =
|
||||
visitElement(wrappedArgumentExpression, data)
|
||||
|
||||
open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): R =
|
||||
visitElement(lambdaArgumentExpression, data)
|
||||
|
||||
open fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): R =
|
||||
visitElement(spreadArgumentExpression, data)
|
||||
|
||||
|
||||
@@ -923,14 +923,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(wrappedArgumentExpression)
|
||||
}
|
||||
|
||||
final override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: Nothing?) {
|
||||
visitLambdaArgumentExpression(lambdaArgumentExpression)
|
||||
}
|
||||
|
||||
open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) {
|
||||
visitElement(lambdaArgumentExpression)
|
||||
}
|
||||
|
||||
final override fun visitSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: Nothing?) {
|
||||
visitSpreadArgumentExpression(spreadArgumentExpression)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user