[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:
Kirill Rakhman
2024-03-04 11:59:13 +01:00
committed by Space Team
parent 1a5fa8d3f6
commit 03fc0fd381
66 changed files with 302 additions and 351 deletions
@@ -658,6 +658,18 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/kotlinPropertySetter_unqualified.kt");
}
@Test
@TestMetadata("labeledLambda.kt")
public void testLabeledLambda() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt");
}
@Test
@TestMetadata("labeledLambdaInsideParentheses.kt")
public void testLabeledLambdaInsideParentheses() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt");
}
@Test
@TestMetadata("memberFunctionCallWithTypeArgument.kt")
public void testMemberFunctionCallWithTypeArgument() {
@@ -1350,8 +1350,10 @@ internal class KtFirCallResolver(
expression.realPsi as? KtExpression
is FirSmartCastExpression ->
originalExpression.realPsi as? KtExpression
is FirNamedArgumentExpression, is FirSpreadArgumentExpression, is FirLambdaArgumentExpression ->
is FirNamedArgumentExpression, is FirSpreadArgumentExpression ->
realPsi.safeAs<KtValueArgument>()?.getArgumentExpression()
is FirAnonymousFunctionExpression ->
realPsi?.parent as? KtLabeledExpression ?: realPsi as? KtExpression
else -> realPsi as? KtExpression
}
}
@@ -235,7 +235,7 @@ internal class KtFirExpressionTypeProvider(
argumentsToParameters.entries.firstOrNull { (arg, _) ->
when (arg) {
// TODO: better to utilize. See `createArgumentMapping` in [KtFirCallResolver]
is FirLambdaArgumentExpression, is FirNamedArgumentExpression, is FirSpreadArgumentExpression ->
is FirNamedArgumentExpression, is FirSpreadArgumentExpression ->
arg.psi == argumentExpression.parent
else ->
arg.psi == argumentExpression
@@ -41,6 +41,7 @@ import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtIfExpression
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -59,6 +59,7 @@ import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtIfExpression
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -1417,7 +1418,7 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
val actualType: KtType
}
interface ManyLambdaExpressionArguments : KtFirDiagnostic<KtValueArgument> {
interface ManyLambdaExpressionArguments : KtFirDiagnostic<KtLambdaExpression> {
override val diagnosticClass get() = ManyLambdaExpressionArguments::class
}
@@ -60,6 +60,7 @@ import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtIfExpression
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -1702,7 +1703,7 @@ internal class ResultTypeMismatchImpl(
internal class ManyLambdaExpressionArgumentsImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtValueArgument>(firDiagnostic, token), KtFirDiagnostic.ManyLambdaExpressionArguments
) : KtAbstractFirDiagnostic<KtLambdaExpression>(firDiagnostic, token), KtFirDiagnostic.ManyLambdaExpressionArguments
internal class NewInferenceNoInformationForParameterImpl(
override val name: String,
@@ -658,6 +658,18 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/kotlinPropertySetter_unqualified.kt");
}
@Test
@TestMetadata("labeledLambda.kt")
public void testLabeledLambda() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt");
}
@Test
@TestMetadata("labeledLambdaInsideParentheses.kt")
public void testLabeledLambdaInsideParentheses() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt");
}
@Test
@TestMetadata("memberFunctionCallWithTypeArgument.kt")
public void testMemberFunctionCallWithTypeArgument() {
@@ -658,6 +658,18 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/kotlinPropertySetter_unqualified.kt");
}
@Test
@TestMetadata("labeledLambda.kt")
public void testLabeledLambda() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt");
}
@Test
@TestMetadata("labeledLambdaInsideParentheses.kt")
public void testLabeledLambdaInsideParentheses() {
runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt");
}
@Test
@TestMetadata("memberFunctionCallWithTypeArgument.kt")
public void testMemberFunctionCallWithTypeArgument() {
@@ -0,0 +1,6 @@
fun foo(l1: (Int) -> Unit) {
}
fun test() {
<expr>foo label@ {}</expr>
}
@@ -0,0 +1,28 @@
KtSuccessCallInfo:
call = KtSimpleFunctionCall:
isImplicitInvoke = false
partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
dispatchReceiver = null
extensionReceiver = null
signature = KtFunctionLikeSignature:
receiverType = null
returnType = kotlin.Unit
symbol = /foo(l1: kotlin.Function1<kotlin.Int, kotlin.Unit>): kotlin.Unit
valueParameters = [
KtVariableLikeSignature:
name = l1
receiverType = null
returnType = kotlin.Function1<kotlin.Int, kotlin.Unit>
symbol = l1: kotlin.Function1<kotlin.Int, kotlin.Unit>
callableIdIfNonLocal = null
]
callableIdIfNonLocal = /foo
typeArgumentsMapping = {}
argumentMapping = {
label@ {} -> (KtVariableLikeSignature:
name = l1
receiverType = null
returnType = kotlin.Function1<kotlin.Int, kotlin.Unit>
symbol = l1: kotlin.Function1<kotlin.Int, kotlin.Unit>
callableIdIfNonLocal = null)
}
@@ -0,0 +1,7 @@
fun foo() {
<expr>bar(2, l@{ it })</expr>
}
fun bar(a: Int, b: (Int) -> Int) {
b(a)
}
@@ -0,0 +1,40 @@
KtSuccessCallInfo:
call = KtSimpleFunctionCall:
isImplicitInvoke = false
partiallyAppliedSymbol = KtPartiallyAppliedSymbol:
dispatchReceiver = null
extensionReceiver = null
signature = KtFunctionLikeSignature:
receiverType = null
returnType = kotlin.Unit
symbol = /bar(a: kotlin.Int, b: kotlin.Function1<kotlin.Int, kotlin.Int>): kotlin.Unit
valueParameters = [
KtVariableLikeSignature:
name = a
receiverType = null
returnType = kotlin.Int
symbol = a: kotlin.Int
callableIdIfNonLocal = null,
KtVariableLikeSignature:
name = b
receiverType = null
returnType = kotlin.Function1<kotlin.Int, kotlin.Int>
symbol = b: kotlin.Function1<kotlin.Int, kotlin.Int>
callableIdIfNonLocal = null
]
callableIdIfNonLocal = /bar
typeArgumentsMapping = {}
argumentMapping = {
2 -> (KtVariableLikeSignature:
name = a
receiverType = null
returnType = kotlin.Int
symbol = a: kotlin.Int
callableIdIfNonLocal = null),
l@{ it } -> (KtVariableLikeSignature:
name = b
receiverType = null
returnType = kotlin.Function1<kotlin.Int, kotlin.Int>
symbol = b: kotlin.Function1<kotlin.Int, kotlin.Int>
callableIdIfNonLocal = null)
}
@@ -73,5 +73,5 @@ FILE: [ResolvedTo(IMPORTS)] statement.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int, [ResolvedTo(RAW_FIR)] action: ( (Int) -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION, <L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION, LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -75,5 +75,5 @@ FILE: [ResolvedTo(IMPORTS)] statement.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] i: Int, [ResolvedTo(RAW_FIR)] action: ( (Int) -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION, <L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION, LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -19,7 +19,7 @@ FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallFromSecondaryConstruc
}
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor([ResolvedTo(BODY_RESOLVE)] l: R|kotlin/Long|): R|B| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
R|/foo|(R|<local>/l|)
}
)
@@ -15,7 +15,7 @@ FILE: [ResolvedTo(IMPORTS)] callInsideLambdaInsideSuperCallFromSingleSecondaryCo
}
public final [ResolvedTo(ANNOTATION_ARGUMENTS)] class B : R|A| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=B] constructor([ResolvedTo(BODY_RESOLVE)] i: R|kotlin/Int|): R|B| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
R|/foo|(R|<local>/i|)
}
)
@@ -24,7 +24,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall.kt
}
public final [ResolvedTo(BODY_RESOLVE)] object C : R|A| {
private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|C| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -24,7 +24,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall2.kt
}
public final [ResolvedTo(BODY_RESOLVE)] object C : R|A| {
private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|C| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -24,7 +24,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall3.kt
}
public final [ResolvedTo(BODY_RESOLVE)] object C : R|A| {
private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] error_constructor(): R|C| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -30,7 +30,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall4.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class G : R|A| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=G] error_constructor(): R|G| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -40,7 +40,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall4.kt
}
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=G] constructor(): R|G| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|C|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -34,7 +34,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall5.kt
}
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=G] constructor(): R|G| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|C|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -30,7 +30,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCallScript.kts
public final [ResolvedTo(BODY_RESOLVE)] object C : R|A| {
private [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=C] constructor(): R|C| {
super<R|A|>([ResolvedTo(RAW_FIR)] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|A|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1<A, kotlin/Unit>] fun R|A|.<anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| {
^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|()
}
@@ -3,7 +3,7 @@ FIR element: FirAnonymousFunctionExpressionImpl
FIR source kind: KtRealSourceElementKind
FIR element rendered:
[ResolvedTo(BODY_RESOLVE)] run@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> {
<L> = [ResolvedTo(BODY_RESOLVE)] run@fun <anonymous>(): R|kotlin/Int| <inline=Unknown> {
^ Int(1)
}
@@ -3,7 +3,7 @@ FIR element: FirAnonymousFunctionExpressionImpl
FIR source kind: KtRealSourceElementKind
FIR element rendered:
[ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0<R>] run@fun <anonymous>(): R|kotlin/Int| <inline=Inline, kind=EXACTLY_ONCE> {
<L> = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0<R>] run@fun <anonymous>(): R|kotlin/Int| <inline=Inline, kind=EXACTLY_ONCE> {
^ Int(1)
}
@@ -8,7 +8,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -28,7 +28,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -48,7 +48,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -68,7 +68,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -88,7 +88,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -108,7 +108,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -128,7 +128,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -148,7 +148,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -168,7 +168,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -188,7 +188,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -208,7 +208,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -228,7 +228,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -248,7 +248,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -268,7 +268,7 @@ FILE: [ResolvedTo(BODY_RESOLVE)] localFunctionInsideFunctionLiteral.kt
}
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -13,7 +13,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -39,7 +39,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -65,7 +65,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -91,7 +91,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -117,7 +117,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -143,7 +143,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -169,7 +169,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -195,7 +195,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -221,7 +221,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -247,7 +247,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -273,7 +273,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -299,7 +299,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -325,7 +325,7 @@ FILE: [ResolvedTo(IMPORTS)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -351,7 +351,7 @@ FILE: [ResolvedTo(BODY_RESOLVE)] localFunctionInsideFunctionLiteralScript.kts
public final [ResolvedTo(BODY_RESOLVE)] class TopLevelClass : R|one/ClassWithParameter| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=TopLevelClass] constructor(): R|one/TopLevelClass| {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
super<R|one/ClassWithParameter|>([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0<kotlin/Unit>] fun <anonymous>(): R|kotlin/Unit| <inline=Unknown> {
local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| {
}
@@ -360,3 +360,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] localFunctionInsideFunctionLiteralScript.kts
}
}
@@ -6,7 +6,7 @@ FILE: [ResolvedTo(RAW_FIR)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -18,7 +18,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -30,7 +30,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] get(): <implicit>
@@ -42,7 +42,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(COMPANION_GENERATION)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(COMPANION_GENERATION)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(COMPANION_GENERATION)] get(): <implicit>
@@ -54,7 +54,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(SUPER_TYPES)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(SUPER_TYPES)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(SUPER_TYPES)] get(): <implicit>
@@ -66,7 +66,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(TYPES)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(TYPES)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(TYPES)] get(): <implicit>
@@ -78,7 +78,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(STATUS)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(STATUS)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(STATUS)] get(): <implicit>
@@ -90,7 +90,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): <implicit>
@@ -102,7 +102,7 @@ FILE: [ResolvedTo(IMPORTS)] syntheticResultDeclarationWithBigBody.kts
public? final? [ResolvedTo(RAW_FIR)] fun <[ResolvedTo(RAW_FIR)] T> foo([ResolvedTo(RAW_FIR)] action: ( () -> T )): T { LAZY_BLOCK }
public final [ResolvedTo(CONTRACTS)] val $$result: <implicit> = foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(CONTRACTS)] val $$result: <implicit> = foo#(LAZY_EXPRESSION)
public [ResolvedTo(CONTRACTS)] get(): <implicit>
@@ -19,7 +19,7 @@ FILE: [ResolvedTo(RAW_FIR)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -44,7 +44,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(RAW_FIR)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(RAW_FIR)] get(): <implicit>
@@ -69,7 +69,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] get(): <implicit>
@@ -94,7 +94,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(COMPANION_GENERATION)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(COMPANION_GENERATION)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(COMPANION_GENERATION)] get(): <implicit>
@@ -119,7 +119,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(SUPER_TYPES)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(SUPER_TYPES)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(SUPER_TYPES)] get(): <implicit>
@@ -144,7 +144,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(TYPES)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(TYPES)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(TYPES)] get(): <implicit>
@@ -169,7 +169,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(STATUS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(STATUS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(STATUS)] get(): <implicit>
@@ -194,7 +194,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): <implicit>
@@ -219,7 +219,7 @@ FILE: [ResolvedTo(IMPORTS)] resultBodyAnnotation.kts
public? final? [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] action: ( () -> Unit )): R|kotlin/Unit| { LAZY_BLOCK }
public final [ResolvedTo(CONTRACTS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(<L> = LAZY_EXPRESSION)
public final [ResolvedTo(CONTRACTS)] val $$result: <implicit> = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION)
public [ResolvedTo(CONTRACTS)] get(): <implicit>
@@ -366,3 +366,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] resultBodyAnnotation.kts
}
)
public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/Unit|
@@ -1,3 +1,3 @@
val foo = { <!UNRESOLVED_REFERENCE!>bar<!> }(
<!SYNTAX!><!SYNTAX!><!>val<!> bar <!SYNTAX!><!SYNTAX!>=<!> <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>{ <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo<!> }<!><!>
<!SYNTAX!><!SYNTAX!><!>val<!> bar <!SYNTAX!><!SYNTAX!>=<!> { <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo<!> }<!>
@@ -630,7 +630,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") {
parameter<ConeKotlinType>("actualType")
}
val MANY_LAMBDA_EXPRESSION_ARGUMENTS by error<KtValueArgument>()
val MANY_LAMBDA_EXPRESSION_ARGUMENTS by error<KtLambdaExpression>()
val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER by error<KtElement> {
parameter<String>("name")
@@ -96,6 +96,7 @@ import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtIfExpression
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.KtLabelReferenceExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtModifierListOwner
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedDeclaration
@@ -406,7 +407,7 @@ object FirErrors {
val NAME_FOR_AMBIGUOUS_PARAMETER: KtDiagnosticFactory0 by error0<KtValueArgument>(SourceElementPositioningStrategies.NAME_OF_NAMED_ARGUMENT)
val ASSIGNMENT_TYPE_MISMATCH: KtDiagnosticFactory3<ConeKotlinType, ConeKotlinType, Boolean> by error3<KtExpression, ConeKotlinType, ConeKotlinType, Boolean>()
val RESULT_TYPE_MISMATCH: KtDiagnosticFactory2<ConeKotlinType, ConeKotlinType> by error2<KtExpression, ConeKotlinType, ConeKotlinType>()
val MANY_LAMBDA_EXPRESSION_ARGUMENTS: KtDiagnosticFactory0 by error0<KtValueArgument>()
val MANY_LAMBDA_EXPRESSION_ARGUMENTS: KtDiagnosticFactory0 by error0<KtLambdaExpression>()
val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER: KtDiagnosticFactory1<String> by error1<KtElement, String>()
val SPREAD_OF_NULLABLE: KtDiagnosticFactory0 by error0<PsiElement>(SourceElementPositioningStrategies.SPREAD_OPERATOR)
val ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_FUNCTION: KtDiagnosticFactoryForDeprecation1<ConeKotlinType> by deprecationError1<KtExpression, ConeKotlinType>(ProhibitAssigningSingleElementsToVarargsInNamedForm)
@@ -488,7 +488,6 @@ object FirInlineDeclarationChecker : FirFunctionChecker(MppCheckerKind.Common) {
private fun isInlinableDefaultValue(expression: FirExpression): Boolean =
expression is FirCallableReferenceAccess ||
expression is FirFunctionCall ||
expression is FirLambdaArgumentExpression ||
expression is FirAnonymousFunctionExpression ||
(expression is FirLiteralExpression<*> && expression.value == null) //this will be reported separately
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.hasDiagnosticKind
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirLambdaArgumentExpression
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -32,7 +31,7 @@ object FirRecursiveProblemChecker : FirBasicExpressionChecker(MppCheckerKind.Com
fun checkConeType(coneType: ConeKotlinType?) {
if (coneType?.hasDiagnosticKind(DiagnosticKind.RecursionInImplicitTypes) == true) {
val source = ((expression as? FirLambdaArgumentExpression)?.expression ?: expression).source
val source = expression.source
reporter.reportOn(source, FirErrors.TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM, context)
} else if (coneType is ConeClassLikeType) {
for (typeArgument in coneType.typeArguments) {
@@ -44,8 +44,7 @@ object FirReturnSyntaxAndLabelChecker : FirReturnExpressionChecker(MppCheckerKin
}
if (functionCall is FirFunctionCall &&
functionCall.arguments.any {
it is FirLambdaArgumentExpression &&
(it.expression as? FirAnonymousFunctionExpression)?.anonymousFunction?.symbol == targetSymbol
it is FirAnonymousFunctionExpression && it.anonymousFunction.symbol == targetSymbol
}
) {
reporter.reportOn(source, FirErrors.RETURN_FOR_BUILT_IN_SUSPEND, context)
@@ -116,7 +116,7 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker(MppCheckerKin
val reference = this.calleeReference
if (reference is FirResolvedCallableReference) return null
if (typeArguments.any { it.source != null }) return null
if (arguments.singleOrNull() is FirLambdaArgumentExpression) {
if (arguments.singleOrNull().let { it is FirAnonymousFunctionExpression && it.isTrailingLambda }) {
// No brackets should be in a selector call
val callExpressionSource =
if (explicitReceiver == null) source
@@ -236,8 +236,8 @@ object FirUninitializedEnumChecker : FirQualifiedAccessExpressionChecker(MppChec
val delegateCall = property.delegate as FirFunctionCall
val calleeSymbol = delegateCall.calleeReference.toResolvedNamedFunctionSymbol() ?: return null
if (calleeSymbol.callableId.asSingleFqName().asString() != "kotlin.lazy") return null
val lazyCallArgument = delegateCall.argumentList.arguments.singleOrNull() as? FirLambdaArgumentExpression ?: return null
return (lazyCallArgument.expression as? FirAnonymousFunctionExpression)?.anonymousFunction
val lazyCallArgument = delegateCall.argumentList.arguments.singleOrNull() as? FirAnonymousFunctionExpression ?: return null
return lazyCallArgument.anonymousFunction
}
private fun FirDeclaration.isEnumEntryInitializer(): Boolean {
@@ -217,10 +217,6 @@ class ExpressionCheckersDiagnosticComponent(
checkers.allBasicExpressionCheckers.check(namedArgumentExpression, data)
}
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: CheckerContext) {
checkers.allBasicExpressionCheckers.check(lambdaArgumentExpression, data)
}
override fun visitSmartCastExpression(smartCastExpression: FirSmartCastExpression, data: CheckerContext) {
checkers.allBasicExpressionCheckers.check(smartCastExpression, data)
}
@@ -1573,11 +1573,6 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
generate(expression.expression)
}
is FirLambdaArgumentExpression -> {
keyword("lambda")
+" = "
generate(expression.expression)
}
is FirTypeOperatorCall -> generate(expression)
is FirEqualityOperatorCall -> generate(expression)
is FirBinaryLogicExpression -> generate(expression)
@@ -88,9 +88,6 @@ class Fir2IrImplicitCastInserter(
// TODO: element-wise cast?
override fun visitArrayLiteral(arrayLiteral: FirArrayLiteral, data: IrElement): IrElement = data
// TODO: something to do w.r.t. SAM?
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: IrElement): IrElement = data
// TODO: element-wise cast?
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression, data: IrElement): IrElement = data
@@ -1513,9 +1513,9 @@ class LightTreeRawFirExpressionBuilder(
VALUE_ARGUMENT -> container += convertValueArgument(node)
LAMBDA_EXPRESSION,
LABELED_EXPRESSION,
ANNOTATED_EXPRESSION -> container += buildLambdaArgumentExpression {
source = valueArguments.toFirSourceElement()
expression = getAsFirExpression(node)
ANNOTATED_EXPRESSION,
-> container += getAsFirExpression<FirAnonymousFunctionExpression>(node).apply {
replaceIsTrailingLambda(newIsTrailingLambda = true)
}
}
}
@@ -904,9 +904,8 @@ open class PsiRawFirBuilder(
val argumentExpression =
buildOrLazyExpression((argument as? PsiElement)?.toFirSourceElement()) { argument.toFirExpression() }
arguments += when (argument) {
is KtLambdaArgument -> buildLambdaArgumentExpression {
source = argument.toFirSourceElement()
expression = argumentExpression
is KtLambdaArgument -> argumentExpression.apply {
(this as? FirAnonymousFunctionExpression)?.replaceIsTrailingLambda(true)
}
else -> argumentExpression
}
@@ -7,7 +7,7 @@ FILE: scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts
@DestrAnno(LAZY_EXPRESSION) lval <destruct>: <implicit> = IntegerLiteral(0).to#(IntegerLiteral(1))
@LeftAnno(LAZY_EXPRESSION) lval a: <implicit> = LAZY_EXPRESSION
@RightAnno(LAZY_EXPRESSION) lval b: <implicit> = LAZY_EXPRESSION
run#(<L> = LAZY_EXPRESSION)
run#(LAZY_EXPRESSION)
@Destr2Anno(LAZY_EXPRESSION) lval <destruct>: <implicit> = IntegerLiteral(2).to#(IntegerLiteral(3))
@SecondLeftAnno(LAZY_EXPRESSION) lval c: <implicit> = LAZY_EXPRESSION
@SecondRightAnno(LAZY_EXPRESSION) lval d: <implicit> = LAZY_EXPRESSION
@@ -75,7 +75,7 @@ fun BodyResolveComponents.mapArguments(
val excessLambdaArguments: MutableList<FirExpression> = mutableListOf()
var externalArgument: FirExpression? = null
for (argument in arguments) {
if (argument is FirLambdaArgumentExpression) {
if (argument is FirAnonymousFunctionExpression && argument.isTrailingLambda) {
if (externalArgument == null) {
externalArgument = argument
} else {
@@ -298,7 +298,7 @@ class FirCallCompleter(
val matchedParameter = candidate.argumentMapping?.firstNotNullOfOrNull { (currentArgument, currentValueParameter) ->
val currentLambdaArgument =
((currentArgument as? FirLambdaArgumentExpression)?.expression as? FirAnonymousFunctionExpression)?.anonymousFunction
(currentArgument as? FirAnonymousFunctionExpression)?.anonymousFunction
if (currentLambdaArgument === lambdaArgument) {
currentValueParameter
} else {
@@ -170,10 +170,10 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
owner.body.replaceFirstStatement<FirContractCallBlock> { FirContractCallBlock(resolvedContractCall) }
}
val argument = resolvedContractCall.arguments.singleOrNull() as? FirLambdaArgumentExpression
val argument = resolvedContractCall.arguments.singleOrNull() as? FirAnonymousFunctionExpression
?: return transformOwnerOfErrorContract(owner)
val lambdaBody = (argument.expression as FirAnonymousFunctionExpression).anonymousFunction.body
val lambdaBody = argument.anonymousFunction.body
?: return transformOwnerOfErrorContract(owner)
val resolvedContractDescription = buildResolvedContractDescription {
@@ -227,10 +227,9 @@ abstract class FirAbstractContractResolveTransformerDispatcher(
}
}
val lambdaArgument = buildLambdaArgumentExpression {
expression = buildAnonymousFunctionExpression {
val lambdaArgument = buildAnonymousFunctionExpression {
anonymousFunction = effectsBlock
}
isTrailingLambda = true
}
val contractCall = buildFunctionCall {
@@ -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
@@ -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
}
@@ -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()
}
@@ -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)
}
@@ -21,11 +21,13 @@ import kotlin.contracts.contract
class FirAnonymousFunctionExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: KtSourceElement? = null
lateinit var anonymousFunction: FirAnonymousFunction
var isTrailingLambda: Boolean = false
override fun build(): FirAnonymousFunctionExpression {
return FirAnonymousFunctionExpressionImpl(
source,
anonymousFunction
anonymousFunction,
isTrailingLambda,
)
}
@@ -19,8 +19,10 @@ import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
@OptIn(UnresolvedExpressionTypeAccess::class)
internal class FirAnonymousFunctionExpressionImpl(
override val source: KtSourceElement?,
override var anonymousFunction: FirAnonymousFunction
override var anonymousFunction: FirAnonymousFunction,
override var isTrailingLambda: Boolean,
) : FirAnonymousFunctionExpression() {
@UnresolvedExpressionTypeAccess
override val coneTypeOrNull: ConeKotlinType?
get() = anonymousFunction.typeRef.coneTypeOrNull
@@ -40,6 +42,10 @@ internal class FirAnonymousFunctionExpressionImpl(
anonymousFunction.replaceAnnotations(newAnnotations)
}
override fun replaceIsTrailingLambda(newIsTrailingLambda: Boolean) {
isTrailingLambda = newIsTrailingLambda
}
override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirAnonymousFunctionExpressionImpl {
return this
}
@@ -435,6 +435,7 @@ class FirRenderer(
}
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression) {
if (anonymousFunctionExpression.isTrailingLambda) print("<L> = ")
visitAnonymousFunction(anonymousFunctionExpression.anonymousFunction)
}
@@ -732,11 +733,6 @@ class FirRenderer(
spreadArgumentExpression.expression.accept(this)
}
override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) {
print("<L> = ")
lambdaArgumentExpression.expression.accept(this)
}
override fun visitVarargArgumentsExpression(varargArgumentsExpression: FirVarargArgumentsExpression) {
print("vararg(")
renderSeparated(varargArgumentsExpression.arguments, visitor)
@@ -744,8 +740,17 @@ class FirRenderer(
}
override fun visitSamConversionExpression(samConversionExpression: FirSamConversionExpression) {
val expression = samConversionExpression.expression
if (expression is FirAnonymousFunctionExpression && expression.isTrailingLambda) {
print("<L> = SAM(")
expression.anonymousFunction.accept(this)
print(")")
return
}
print("SAM(")
samConversionExpression.expression.accept(this)
expression.accept(this)
print(")")
}
@@ -70,11 +70,6 @@ abstract class FirDefaultTransformer<D> : FirTransformer<D>() {
return transformJump(breakExpression, data)
}
override fun transformLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): FirStatement {
return transformWrappedArgumentExpression(lambdaArgumentExpression, data)
}
override fun transformSpreadArgumentExpression(spreadArgumentExpression: FirSpreadArgumentExpression, data: D): FirStatement {
return transformWrappedArgumentExpression(spreadArgumentExpression, data)
}
@@ -143,7 +143,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val getClassCall by element(Expression, expression, call)
val wrappedExpression by element(Expression, expression)
val wrappedArgumentExpression by element(Expression, wrappedExpression)
val lambdaArgumentExpression by element(Expression, wrappedArgumentExpression)
val spreadArgumentExpression by element(Expression, wrappedArgumentExpression)
val namedArgumentExpression by element(Expression, wrappedArgumentExpression)
val varargArgumentsExpression by element(Expression, expression)
@@ -316,16 +316,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
}
}
impl(lambdaArgumentExpression) {
default("isSpread") {
value = "false"
withGetter = true
}
default("coneTypeOrNull") {
delegate = "expression"
}
}
impl(spreadArgumentExpression) {
default("isSpread") {
value = "true"
@@ -331,6 +331,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousFunctionExpression.configure {
+field(anonymousFunction).withTransform()
+booleanField("isTrailingLambda", withReplace = true)
}
typeParameter.configure {
@@ -25,4 +25,19 @@ enum class JvmTarget(val description: String) {
JVM_15 -> "Opcodes.V12 + 3"
}
}
// Should not report UNINITIALIZED_ENUM_ENTRY
val bytecodeVersion2: String by lazy({
when (this) {
JVM_1_6 -> "Opcodes.V1_6"
JVM_1_8 -> "Opcodes.V1_8"
JVM_9 -> "Opcodes.V9"
JVM_10 -> "Opcodes.V10"
JVM_11 -> "Opcodes.V11"
JVM_12 -> "Opcodes.V12"
JVM_13 -> "Opcodes.V12 + 1"
JVM_14 -> "Opcodes.V12 + 2"
JVM_15 -> "Opcodes.V12 + 3"
}
})
}
@@ -21,6 +21,7 @@ public final enum class JvmTarget : kotlin.Enum<JvmTarget> {
private constructor JvmTarget(/*0*/ description: kotlin.String)
public final val bytecodeVersion: kotlin.String
public final val bytecodeVersion2: kotlin.String
public final val description: kotlin.String
@kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int
@@ -29,7 +29,7 @@ import kotlin.contracts.*
// TESTCASE NUMBER: 1
inline fun case_1(block: () -> Unit) {
contract(builder = { callsInPlaceEffectBuilder(block) })
contract(builder = { <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
return block()
}
@@ -41,6 +41,6 @@ inline fun case_2(block: () -> Unit) {
// TESTCASE NUMBER: 3
inline fun case_3(value_1: Int?, block: () -> Unit) {
contract({ returnsEffectBuilder(value_1); callsInPlaceEffectBuilder(block) })
contract({ <!ERROR_IN_CONTRACT_DESCRIPTION!>returnsEffectBuilder(value_1)<!>; <!ERROR_IN_CONTRACT_DESCRIPTION!>callsInPlaceEffectBuilder(block)<!> })
return block()
}
@@ -19,12 +19,12 @@ inline fun case_1(block: () -> Unit) {
// TESTCASE NUMBER: 2
inline fun case_2(block: () -> Unit) {
contract({ })
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract({ })<!>
return block()
}
// TESTCASE NUMBER: 3
inline fun case_3(block: () -> Unit) {
contract(builder = { })
<!ERROR_IN_CONTRACT_DESCRIPTION!>contract(builder = { })<!>
return block()
}
@@ -15,14 +15,15 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.caches.firCachesFactory
import org.jetbrains.kotlin.fir.caches.getValue
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.builder.buildAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.buildResolvedArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.buildAnonymousFunctionExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildBlock
import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall
import org.jetbrains.kotlin.fir.expressions.builder.buildLambdaArgumentExpression
import org.jetbrains.kotlin.fir.extensions.FirExtensionApiInternals
import org.jetbrains.kotlin.fir.extensions.FirExtensionSessionComponent
import org.jetbrains.kotlin.fir.extensions.FirFunctionCallRefinementExtension
@@ -152,9 +153,9 @@ class DataFrameLikeCallsRefinementExtension(session: FirSession) : FirFunctionCa
refinedType.callShapeData = CallShapeData.RefinedType(listOf(scopeSymbol))
val argument = buildLambdaArgumentExpression {
expression = buildAnonymousFunctionExpression {
val argument = buildAnonymousFunctionExpression {
val fSymbol = FirAnonymousFunctionSymbol()
isTrailingLambda = true
anonymousFunction = buildAnonymousFunction {
resolvePhase = FirResolvePhase.BODY_RESOLVE
moduleData = session.moduleData
@@ -205,7 +206,6 @@ class DataFrameLikeCallsRefinementExtension(session: FirSession) : FirFunctionCa
inlineStatus = InlineStatus.Inline
}.also { fSymbol.bind(it) }
}
}
val newCall = buildFunctionCall {
this.coneTypeOrNull = returnType