From 03fc0fd381af347aa35c4adcf66dc67d9a11801c Mon Sep 17 00:00:00 2001 From: Kirill Rakhman Date: Mon, 4 Mar 2024 11:59:13 +0100 Subject: [PATCH] [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 --- ...sSourceModuleResolveCallTestGenerated.java | 12 +++ .../api/fir/components/KtFirCallResolver.kt | 4 +- .../components/KtFirExpressionTypeProvider.kt | 2 +- .../diagnostics/KtFirDataClassConverters.kt | 1 + .../api/fir/diagnostics/KtFirDiagnostics.kt | 3 +- .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 3 +- ...sSourceModuleResolveCallTestGenerated.java | 12 +++ ...sSourceModuleResolveCallTestGenerated.java | 12 +++ .../callResolver/resolveCall/labeledLambda.kt | 6 ++ .../resolveCall/labeledLambda.txt | 28 ++++++ .../labeledLambdaInsideParentheses.kt | 7 ++ .../labeledLambdaInsideParentheses.txt | 40 ++++++++ .../scripts/statement.copy.txt | 2 +- .../contextCollector/scripts/statement.txt | 2 +- ...nsideSuperCallFromSecondaryConstructor.txt | 2 +- ...uperCallFromSingleSecondaryConstructor.txt | 2 +- .../calls/qualifiedCallInsideSuperCall.txt | 2 +- .../calls/qualifiedCallInsideSuperCall2.txt | 2 +- .../calls/qualifiedCallInsideSuperCall3.txt | 2 +- .../calls/qualifiedCallInsideSuperCall4.txt | 4 +- .../calls/qualifiedCallInsideSuperCall5.txt | 2 +- .../qualifiedCallInsideSuperCallScript.txt | 2 +- .../lambdaExpression.out_of_src_roots.txt | 2 +- .../expressions/lambdaExpression.txt | 2 +- .../localFunctionInsideFunctionLiteral.txt | 28 +++--- ...calFunctionInsideFunctionLiteralScript.txt | 29 +++--- .../syntheticResultDeclarationWithBigBody.txt | 18 ++-- .../resultBodyAnnotation.lazyResolve.txt | 19 ++-- .../recursiveProblemWithSyntaxError.kt | 2 +- .../diagnostics/FirDiagnosticsList.kt | 2 +- .../fir/analysis/diagnostics/FirErrors.kt | 3 +- .../FirInlineDeclarationChecker.kt | 1 - .../expression/FirRecursiveProblemChecker.kt | 3 +- .../FirReturnSyntaxAndLabelChecker.kt | 3 +- .../expression/FirSuspendCallChecker.kt | 2 +- .../expression/FirUninitializedEnumChecker.kt | 4 +- .../ExpressionCheckersDiagnosticComponent.kt | 4 - .../jetbrains/kotlin/fir/dump/HtmlFirDump.kt | 5 - .../fir/backend/Fir2IrImplicitCastInserter.kt | 3 - .../LightTreeRawFirExpressionBuilder.kt | 6 +- .../kotlin/fir/builder/PsiRawFirBuilder.kt | 5 +- ...thAnnotationAsLastStatement.lazyBodies.txt | 2 +- .../calls/FirArgumentsToParametersMapper.kt | 2 +- .../fir/resolve/inference/FirCallCompleter.kt | 2 +- ...actContractResolveTransformerDispatcher.kt | 11 +-- .../FirAnonymousFunctionExpression.kt | 3 + .../FirLambdaArgumentExpression.kt | 40 -------- .../FirLambdaArgumentExpressionBuilder.kt | 53 ---------- .../impl/FirLambdaArgumentExpressionImpl.kt | 57 ----------- .../kotlin/fir/visitors/FirDefaultVisitor.kt | 3 - .../fir/visitors/FirDefaultVisitorVoid.kt | 2 - .../kotlin/fir/visitors/FirTransformer.kt | 8 -- .../kotlin/fir/visitors/FirVisitor.kt | 3 - .../kotlin/fir/visitors/FirVisitorVoid.kt | 8 -- .../FirAnonymousFunctionExpressionBuilder.kt | 4 +- .../FirAnonymousFunctionExpressionImpl.kt | 8 +- .../kotlin/fir/renderer/FirRenderer.kt | 17 ++-- .../fir/visitors/FirDefaultTransformer.kt | 5 - .../fir/tree/generator/FirTreeBuilder.kt | 1 - .../generator/ImplementationConfigurator.kt | 10 -- .../fir/tree/generator/NodeConfigurator.kt | 1 + .../enumEntryInitialization.kt | 15 +++ .../enumEntryInitialization.txt | 1 + .../contractBuilder/common/neg/12.fir.kt | 4 +- .../contractBuilder/common/neg/8.fir.kt | 4 +- .../DataFrameLikeCallsRefinementExtension.kt | 96 +++++++++---------- 66 files changed, 302 insertions(+), 351 deletions(-) create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.txt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt create mode 100644 analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.txt delete mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt delete mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirLambdaArgumentExpressionBuilder.kt delete mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index f4c8c88208b..76d87ee2f8e 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -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() { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index b9cff7424dc..d063a8e27ef 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -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()?.getArgumentExpression() + is FirAnonymousFunctionExpression -> + realPsi?.parent as? KtLabeledExpression ?: realPsi as? KtExpression else -> realPsi as? KtExpression } } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt index 40dbdb54f1e..44f328d7b2a 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirExpressionTypeProvider.kt @@ -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 diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index 7a1e73add17..c1a885ea368 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -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 diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index a468cb58e3f..5a3015b67e6 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -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 : KtDiagnosticWithPsi { val actualType: KtType } - interface ManyLambdaExpressionArguments : KtFirDiagnostic { + interface ManyLambdaExpressionArguments : KtFirDiagnostic { override val diagnosticClass get() = ManyLambdaExpressionArguments::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index bc7734318a2..0e56ba3026a 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -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(firDiagnostic, token), KtFirDiagnostic.ManyLambdaExpressionArguments +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.ManyLambdaExpressionArguments internal class NewInferenceNoInformationForParameterImpl( override val name: String, diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index 353d3c4d59c..dfc560d430c 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -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() { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java index c9c4c9ac588..6573a720629 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -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() { diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt new file mode 100644 index 00000000000..e68534cdfd9 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.kt @@ -0,0 +1,6 @@ +fun foo(l1: (Int) -> Unit) { +} + +fun test() { + foo label@ {} +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.txt new file mode 100644 index 00000000000..1d6fe9064a9 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambda.txt @@ -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.Unit + valueParameters = [ + KtVariableLikeSignature: + name = l1 + receiverType = null + returnType = kotlin.Function1 + symbol = l1: kotlin.Function1 + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /foo + typeArgumentsMapping = {} + argumentMapping = { + label@ {} -> (KtVariableLikeSignature: + name = l1 + receiverType = null + returnType = kotlin.Function1 + symbol = l1: kotlin.Function1 + callableIdIfNonLocal = null) + } diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt new file mode 100644 index 00000000000..a3a8866770a --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.kt @@ -0,0 +1,7 @@ +fun foo() { + bar(2, l@{ it }) +} + +fun bar(a: Int, b: (Int) -> Int) { + b(a) +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.txt new file mode 100644 index 00000000000..2ef6bff442d --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/labeledLambdaInsideParentheses.txt @@ -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.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null, + KtVariableLikeSignature: + name = b + receiverType = null + returnType = kotlin.Function1 + symbol = b: kotlin.Function1 + 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 + symbol = b: kotlin.Function1 + callableIdIfNonLocal = null) + } diff --git a/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.copy.txt b/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.copy.txt index 050d386e2e7..8004e9ca8ca 100644 --- a/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.copy.txt +++ b/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.copy.txt @@ -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: = foo#(LAZY_EXPRESSION, = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = foo#(LAZY_EXPRESSION, LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.txt b/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.txt index b8b5b206953..943174b2ff4 100644 --- a/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.txt +++ b/analysis/low-level-api-fir/testData/contextCollector/scripts/statement.txt @@ -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: = foo#(LAZY_EXPRESSION, = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = foo#(LAZY_EXPRESSION, LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSecondaryConstructor.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSecondaryConstructor.txt index 617c68c578b..b90783e7065 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSecondaryConstructor.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSecondaryConstructor.txt @@ -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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { R|/foo|(R|/l|) } ) diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.txt index 4a4fdc1f3cc..13f0dd0865a 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/callInsideLambdaInsideSuperCallFromSingleSecondaryConstructor.txt @@ -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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { R|/foo|(R|/i|) } ) diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall.txt index 028fa6afae7..8349dc99f5c 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall.txt @@ -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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall2.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall2.txt index fb27799640f..c52b35a7f5a 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall2.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall2.txt @@ -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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall3.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall3.txt index bf3a96ee029..2903b841b58 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall3.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall3.txt @@ -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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall4.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall4.txt index 39540368196..91dc3178ea5 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall4.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall4.txt @@ -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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|C|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall5.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall5.txt index 9ece26d1df2..9625aebb364 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall5.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCall5.txt @@ -34,7 +34,7 @@ FILE: [ResolvedTo(IMPORTS)] qualifiedCallInsideSuperCall5.kt } public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=G] constructor(): R|G| { - super([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|C|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCallScript.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCallScript.txt index fc5ca62d863..7f8dde3e8a7 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCallScript.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/calls/qualifiedCallInsideSuperCallScript.txt @@ -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([ResolvedTo(RAW_FIR)] fun R|A|.(): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=@ExtensionFunctionType kotlin/Function1] fun R|A|.(): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo(): R|kotlin/String| { ^foo Q|B|.R|/A.prop|.R|kotlin/String.toString|() } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.out_of_src_roots.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.out_of_src_roots.txt index f506cba7363..c2bb9f3418e 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.out_of_src_roots.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.out_of_src_roots.txt @@ -3,7 +3,7 @@ FIR element: FirAnonymousFunctionExpressionImpl FIR source kind: KtRealSourceElementKind FIR element rendered: -[ResolvedTo(BODY_RESOLVE)] run@fun (): R|kotlin/Int| { + = [ResolvedTo(BODY_RESOLVE)] run@fun (): R|kotlin/Int| { ^ Int(1) } diff --git a/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.txt b/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.txt index d8e68201e5a..43df1166013 100644 --- a/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.txt +++ b/analysis/low-level-api-fir/testData/getOrBuildFir/expressions/lambdaExpression.txt @@ -3,7 +3,7 @@ FIR element: FirAnonymousFunctionExpressionImpl FIR source kind: KtRealSourceElementKind FIR element rendered: -[ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0] run@fun (): R|kotlin/Int| { + = [ResolvedTo(BODY_RESOLVE)] [MatchingParameterFunctionTypeKey=kotlin/Function0] run@fun (): R|kotlin/Int| { ^ Int(1) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteral.txt b/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteral.txt index 8984b00d5e8..98961932f71 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteral.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteral.txt @@ -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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { local final [ResolvedTo(RAW_FIR)] fun foo([ResolvedTo(RAW_FIR)] param: R|kotlin/String|): R|kotlin/Unit| { } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteralScript.txt b/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteralScript.txt index 8d847fb96e0..28810e3f8d2 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteralScript.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/localFunctionInsideFunctionLiteralScript.txt @@ -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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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([ResolvedTo(RAW_FIR)] fun (): R|kotlin/Unit| { + super([ResolvedTo(RAW_FIR)] [MatchingParameterFunctionTypeKey=kotlin/Function0] fun (): R|kotlin/Unit| { 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 } } + diff --git a/analysis/low-level-api-fir/testData/lazyResolve/syntheticResultDeclarationWithBigBody.txt b/analysis/low-level-api-fir/testData/lazyResolve/syntheticResultDeclarationWithBigBody.txt index 69ff8349599..f26305e9459 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/syntheticResultDeclarationWithBigBody.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/syntheticResultDeclarationWithBigBody.txt @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(COMPANION_GENERATION)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(COMPANION_GENERATION)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(SUPER_TYPES)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(SUPER_TYPES)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(TYPES)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(TYPES)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(STATUS)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(STATUS)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): @@ -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: = foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(CONTRACTS)] val $$result: = foo#(LAZY_EXPRESSION) public [ResolvedTo(CONTRACTS)] get(): diff --git a/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/property/resultBodyAnnotation.lazyResolve.txt b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/property/resultBodyAnnotation.lazyResolve.txt index e87236df3c5..ef52b864fa4 100644 --- a/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/property/resultBodyAnnotation.lazyResolve.txt +++ b/analysis/low-level-api-fir/testData/lazyResolveTypeAnnotations/property/resultBodyAnnotation.lazyResolve.txt @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(RAW_FIR)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(RAW_FIR)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(COMPANION_GENERATION)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(COMPANION_GENERATION)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(SUPER_TYPES)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(SUPER_TYPES)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(TYPES)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(TYPES)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(STATUS)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(STATUS)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(EXPECT_ACTUAL_MATCHING)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): @@ -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: = @Anno[Unresolved](LAZY_EXPRESSION) foo#( = LAZY_EXPRESSION) + public final [ResolvedTo(CONTRACTS)] val $$result: = @Anno[Unresolved](LAZY_EXPRESSION) foo#(LAZY_EXPRESSION) public [ResolvedTo(CONTRACTS)] get(): @@ -366,3 +366,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] resultBodyAnnotation.kts } ) public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/Unit| + diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/recursiveProblemWithSyntaxError.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/recursiveProblemWithSyntaxError.kt index 9910d05708d..0bf52e04628 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/recursiveProblemWithSyntaxError.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/recursiveProblemWithSyntaxError.kt @@ -1,3 +1,3 @@ val foo = { bar }( -val bar = { foo } +val bar = { foo } diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 27816c021e8..d5105d135a6 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -630,7 +630,7 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("actualType") } - val MANY_LAMBDA_EXPRESSION_ARGUMENTS by error() + val MANY_LAMBDA_EXPRESSION_ARGUMENTS by error() val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER by error { parameter("name") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 2ab8e4c6e20..ec95a170a3d 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -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(SourceElementPositioningStrategies.NAME_OF_NAMED_ARGUMENT) val ASSIGNMENT_TYPE_MISMATCH: KtDiagnosticFactory3 by error3() val RESULT_TYPE_MISMATCH: KtDiagnosticFactory2 by error2() - val MANY_LAMBDA_EXPRESSION_ARGUMENTS: KtDiagnosticFactory0 by error0() + val MANY_LAMBDA_EXPRESSION_ARGUMENTS: KtDiagnosticFactory0 by error0() val NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER: KtDiagnosticFactory1 by error1() val SPREAD_OF_NULLABLE: KtDiagnosticFactory0 by error0(SourceElementPositioningStrategies.SPREAD_OPERATOR) val ASSIGNING_SINGLE_ELEMENT_TO_VARARG_IN_NAMED_FORM_FUNCTION: KtDiagnosticFactoryForDeprecation1 by deprecationError1(ProhibitAssigningSingleElementsToVarargsInNamedForm) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt index d2668f055bd..0e38c257c89 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt @@ -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 diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirRecursiveProblemChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirRecursiveProblemChecker.kt index ff0220a8350..e5a896aee24 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirRecursiveProblemChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirRecursiveProblemChecker.kt @@ -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) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReturnSyntaxAndLabelChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReturnSyntaxAndLabelChecker.kt index a1de43a4919..5f1c4f8cc59 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReturnSyntaxAndLabelChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReturnSyntaxAndLabelChecker.kt @@ -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) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt index a4c0cd909b9..d527561fe44 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirSuspendCallChecker.kt @@ -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 diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt index 8a7db1ab704..c9465ce1ff6 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirUninitializedEnumChecker.kt @@ -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 { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt index 1f1a8e93690..6b576ab9b5b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt @@ -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) } diff --git a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt index 0734bc5608b..ec67c7abf04 100644 --- a/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt +++ b/compiler/fir/dump/src/org/jetbrains/kotlin/fir/dump/HtmlFirDump.kt @@ -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) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt index e6cb69c2a49..61c6986091c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt @@ -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 diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt index 75c5c7c5497..22d0ad8d2d1 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/LightTreeRawFirExpressionBuilder.kt @@ -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(node).apply { + replaceIsTrailingLambda(newIsTrailingLambda = true) } } } diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index 474e792590c..d9da9bf3320 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -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 } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/scriptStatementLevelDestructuringWithAnnotationAsLastStatement.lazyBodies.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/scriptStatementLevelDestructuringWithAnnotationAsLastStatement.lazyBodies.txt index 0c1aa7d219e..ca123484775 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/scriptStatementLevelDestructuringWithAnnotationAsLastStatement.lazyBodies.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/scriptStatementLevelDestructuringWithAnnotationAsLastStatement.lazyBodies.txt @@ -7,7 +7,7 @@ FILE: scriptStatementLevelDestructuringWithAnnotationAsLastStatement.kts @DestrAnno(LAZY_EXPRESSION) lval : = IntegerLiteral(0).to#(IntegerLiteral(1)) @LeftAnno(LAZY_EXPRESSION) lval a: = LAZY_EXPRESSION @RightAnno(LAZY_EXPRESSION) lval b: = LAZY_EXPRESSION - run#( = LAZY_EXPRESSION) + run#(LAZY_EXPRESSION) @Destr2Anno(LAZY_EXPRESSION) lval : = IntegerLiteral(2).to#(IntegerLiteral(3)) @SecondLeftAnno(LAZY_EXPRESSION) lval c: = LAZY_EXPRESSION @SecondRightAnno(LAZY_EXPRESSION) lval d: = LAZY_EXPRESSION diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt index a1eb30bd8bd..4ee60886a92 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirArgumentsToParametersMapper.kt @@ -75,7 +75,7 @@ fun BodyResolveComponents.mapArguments( val excessLambdaArguments: MutableList = 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 { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt index 24a492a865e..57fb57c21b0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/FirCallCompleter.kt @@ -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 { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt index 555a0093d3e..ece6ed2a8a0 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirAbstractContractResolveTransformerDispatcher.kt @@ -170,10 +170,10 @@ abstract class FirAbstractContractResolveTransformerDispatcher( owner.body.replaceFirstStatement { 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 { - anonymousFunction = effectsBlock - } + val lambdaArgument = buildAnonymousFunctionExpression { + anonymousFunction = effectsBlock + isTrailingLambda = true } val contractCall = buildFunctionCall { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnonymousFunctionExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnonymousFunctionExpression.kt index 717d5131c4f..f8c25caa56e 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnonymousFunctionExpression.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirAnonymousFunctionExpression.kt @@ -24,6 +24,7 @@ abstract class FirAnonymousFunctionExpression : FirExpression() { abstract override val coneTypeOrNull: ConeKotlinType? abstract override val annotations: List abstract val anonymousFunction: FirAnonymousFunction + abstract val isTrailingLambda: Boolean override fun accept(visitor: FirVisitor, data: D): R = visitor.visitAnonymousFunctionExpression(this, data) @@ -36,6 +37,8 @@ abstract class FirAnonymousFunctionExpression : FirExpression() { abstract override fun replaceAnnotations(newAnnotations: List) + abstract fun replaceIsTrailingLambda(newIsTrailingLambda: Boolean) + abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirAnonymousFunctionExpression abstract fun transformAnonymousFunction(transformer: FirTransformer, data: D): FirAnonymousFunctionExpression diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt deleted file mode 100644 index d3945282a53..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/FirLambdaArgumentExpression.kt +++ /dev/null @@ -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 - abstract override val expression: FirExpression - abstract override val isSpread: Boolean - - override fun accept(visitor: FirVisitor, data: D): R = - visitor.visitLambdaArgumentExpression(this, data) - - @Suppress("UNCHECKED_CAST") - override fun transform(transformer: FirTransformer, data: D): E = - transformer.transformLambdaArgumentExpression(this, data) as E - - abstract override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) - - abstract override fun replaceAnnotations(newAnnotations: List) - - abstract override fun transformAnnotations(transformer: FirTransformer, data: D): FirLambdaArgumentExpression -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirLambdaArgumentExpressionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirLambdaArgumentExpressionBuilder.kt deleted file mode 100644 index 77792beae88..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/builder/FirLambdaArgumentExpressionBuilder.kt +++ /dev/null @@ -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 = 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() -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt deleted file mode 100644 index d0201009205..00000000000 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/expressions/impl/FirLambdaArgumentExpressionImpl.kt +++ /dev/null @@ -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, - override var expression: FirExpression, -) : FirLambdaArgumentExpression() { - @OptIn(UnresolvedExpressionTypeAccess::class) - override val coneTypeOrNull: ConeKotlinType? - get() = expression.coneTypeOrNull - override val isSpread: Boolean - get() = false - - override fun acceptChildren(visitor: FirVisitor, data: D) { - annotations.forEach { it.accept(visitor, data) } - expression.accept(visitor, data) - } - - override fun transformChildren(transformer: FirTransformer, data: D): FirLambdaArgumentExpressionImpl { - transformAnnotations(transformer, data) - expression = expression.transform(transformer, data) - return this - } - - override fun transformAnnotations(transformer: FirTransformer, data: D): FirLambdaArgumentExpressionImpl { - annotations.transformInplace(transformer, data) - return this - } - - override fun replaceConeTypeOrNull(newConeTypeOrNull: ConeKotlinType?) {} - - override fun replaceAnnotations(newAnnotations: List) { - annotations = newAnnotations.toMutableOrEmpty() - } -} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt index 8a8df0c6ac6..2a546300210 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt @@ -170,9 +170,6 @@ abstract class FirDefaultVisitor : FirVisitor() { 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) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt index 2883771c1c3..ac7b8a843e1 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt @@ -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) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index dd5b277cc78..912ded2dbd8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -923,14 +923,6 @@ abstract class FirTransformer : FirVisitor() { 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) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index 9eb5bc8a839..86a310be735 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -359,9 +359,6 @@ abstract class FirVisitor { 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) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index ff676e658c8..9e406f71e8b 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -923,14 +923,6 @@ abstract class FirVisitorVoid : FirVisitor() { 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) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/builder/FirAnonymousFunctionExpressionBuilder.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/builder/FirAnonymousFunctionExpressionBuilder.kt index 19c70c0df0e..f29e3315c1b 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/builder/FirAnonymousFunctionExpressionBuilder.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/builder/FirAnonymousFunctionExpressionBuilder.kt @@ -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, ) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnonymousFunctionExpressionImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnonymousFunctionExpressionImpl.kt index 68919043cdb..f1b5b255d7e 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnonymousFunctionExpressionImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnonymousFunctionExpressionImpl.kt @@ -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 transformAnnotations(transformer: FirTransformer, data: D): FirAnonymousFunctionExpressionImpl { return this } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt index d030a3cf40d..2fda9583a71 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirRenderer.kt @@ -435,6 +435,7 @@ class FirRenderer( } override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression) { + if (anonymousFunctionExpression.isTrailingLambda) print(" = ") visitAnonymousFunction(anonymousFunctionExpression.anonymousFunction) } @@ -732,11 +733,6 @@ class FirRenderer( spreadArgumentExpression.expression.accept(this) } - override fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) { - print(" = ") - 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(" = SAM(") + expression.anonymousFunction.accept(this) + print(")") + return + } + print("SAM(") - samConversionExpression.expression.accept(this) + expression.accept(this) print(")") } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt index 9993d63d8aa..ffcb32c8979 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/visitors/FirDefaultTransformer.kt @@ -70,11 +70,6 @@ abstract class FirDefaultTransformer : FirTransformer() { 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) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index 2912edaab41..f80bfe4f058 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -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) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 18c77db3a3b..82989efecc2 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -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" diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt index b8c9196009a..eb474e172b6 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/NodeConfigurator.kt @@ -331,6 +331,7 @@ object NodeConfigurator : AbstractFieldConfigurator(FirTreeBuild anonymousFunctionExpression.configure { +field(anonymousFunction).withTransform() + +booleanField("isTrailingLambda", withReplace = true) } typeParameter.configure { diff --git a/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.kt b/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.kt index 86f9c97a3c2..e0be0d66b59 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.kt @@ -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" + } + }) } diff --git a/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.txt b/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.txt index af5eb6eea3c..92c42110531 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/enumEntryInitialization.txt @@ -21,6 +21,7 @@ public final enum class JvmTarget : kotlin.Enum { 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 diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/12.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/12.fir.kt index 047b2194ce6..79b114b0dc4 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/12.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/12.fir.kt @@ -29,7 +29,7 @@ import kotlin.contracts.* // TESTCASE NUMBER: 1 inline fun case_1(block: () -> Unit) { - contract(builder = { callsInPlaceEffectBuilder(block) }) + contract(builder = { 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({ returnsEffectBuilder(value_1); callsInPlaceEffectBuilder(block) }) return block() } diff --git a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/8.fir.kt b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/8.fir.kt index 9906205d640..2177b3fbe82 100644 --- a/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/8.fir.kt +++ b/compiler/tests-spec/testData/diagnostics/notLinked/contracts/declarations/contractBuilder/common/neg/8.fir.kt @@ -19,12 +19,12 @@ inline fun case_1(block: () -> Unit) { // TESTCASE NUMBER: 2 inline fun case_2(block: () -> Unit) { - contract({ }) + contract({ }) return block() } // TESTCASE NUMBER: 3 inline fun case_3(block: () -> Unit) { - contract(builder = { }) + contract(builder = { }) return block() } diff --git a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/DataFrameLikeCallsRefinementExtension.kt b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/DataFrameLikeCallsRefinementExtension.kt index 53126f0b8f4..769eead29c8 100644 --- a/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/DataFrameLikeCallsRefinementExtension.kt +++ b/plugins/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/DataFrameLikeCallsRefinementExtension.kt @@ -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,59 +153,58 @@ class DataFrameLikeCallsRefinementExtension(session: FirSession) : FirFunctionCa refinedType.callShapeData = CallShapeData.RefinedType(listOf(scopeSymbol)) - val argument = buildLambdaArgumentExpression { - expression = buildAnonymousFunctionExpression { - val fSymbol = FirAnonymousFunctionSymbol() - anonymousFunction = buildAnonymousFunction { - resolvePhase = FirResolvePhase.BODY_RESOLVE + val argument = buildAnonymousFunctionExpression { + val fSymbol = FirAnonymousFunctionSymbol() + isTrailingLambda = true + anonymousFunction = buildAnonymousFunction { + resolvePhase = FirResolvePhase.BODY_RESOLVE + moduleData = session.moduleData + origin = FirDeclarationOrigin.Plugin(KEY) + status = FirResolvedDeclarationStatusImpl(Visibilities.Local, Modality.FINAL, EffectiveVisibility.Local) + deprecationsProvider = EmptyDeprecationsProvider + returnTypeRef = buildResolvedTypeRef { + type = returnType + } + val itName = Name.identifier("it") + val parameterSymbol = FirValueParameterSymbol(itName) + valueParameters += buildValueParameter { moduleData = session.moduleData origin = FirDeclarationOrigin.Plugin(KEY) - status = FirResolvedDeclarationStatusImpl(Visibilities.Local, Modality.FINAL, EffectiveVisibility.Local) - deprecationsProvider = EmptyDeprecationsProvider returnTypeRef = buildResolvedTypeRef { - type = returnType + type = receiverType } - val itName = Name.identifier("it") - val parameterSymbol = FirValueParameterSymbol(itName) - valueParameters += buildValueParameter { - moduleData = session.moduleData - origin = FirDeclarationOrigin.Plugin(KEY) - returnTypeRef = buildResolvedTypeRef { - type = receiverType - } - name = itName - this.symbol = parameterSymbol - containingFunctionSymbol = fSymbol - isCrossinline = false - isNoinline = false - isVararg = false - }.also { parameterSymbol.bind(it) } - body = buildBlock { - this.coneTypeOrNull = returnType + name = itName + this.symbol = parameterSymbol + containingFunctionSymbol = fSymbol + isCrossinline = false + isNoinline = false + isVararg = false + }.also { parameterSymbol.bind(it) } + body = buildBlock { + this.coneTypeOrNull = returnType - // Schema is required for static extensions resolve and holds information for subsequent call modifications - statements += schemaClass + // Schema is required for static extensions resolve and holds information for subsequent call modifications + statements += schemaClass - // Scope (provides extensions API) - statements += scopeClass + // Scope (provides extensions API) + statements += scopeClass - // Return type - dataframe schema - statements += refinedType - } - this.symbol = fSymbol - isLambda = true - hasExplicitParameterList = false - typeRef = buildResolvedTypeRef { - type = ConeClassLikeTypeImpl( - ConeClassLikeLookupTagImpl(ClassId(FqName("kotlin"), Name.identifier("Function1"))), - typeArguments = arrayOf(receiverType, returnType), - isNullable = false - ) - } - invocationKind = EventOccurrencesRange.EXACTLY_ONCE - inlineStatus = InlineStatus.Inline - }.also { fSymbol.bind(it) } - } + // Return type - dataframe schema + statements += refinedType + } + this.symbol = fSymbol + isLambda = true + hasExplicitParameterList = false + typeRef = buildResolvedTypeRef { + type = ConeClassLikeTypeImpl( + ConeClassLikeLookupTagImpl(ClassId(FqName("kotlin"), Name.identifier("Function1"))), + typeArguments = arrayOf(receiverType, returnType), + isNullable = false + ) + } + invocationKind = EventOccurrencesRange.EXACTLY_ONCE + inlineStatus = InlineStatus.Inline + }.also { fSymbol.bind(it) } } val newCall = buildFunctionCall {