diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 0f377326c14..fbf874b47c4 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -32222,6 +32222,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendAndFunConversionInDisabledMode.kt"); } + @Test + @TestMetadata("suspendCallFromAnonymousSuspend.kt") + public void testSuspendCallFromAnonymousSuspend() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt"); + } + @Test @TestMetadata("suspendConversionCompatibility.kt") public void testSuspendConversionCompatibility() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index a539d412ccb..e8e9bf6ac0e 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -32222,6 +32222,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendAndFunConversionInDisabledMode.kt"); } + @Test + @TestMetadata("suspendCallFromAnonymousSuspend.kt") + public void testSuspendCallFromAnonymousSuspend() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt"); + } + @Test @TestMetadata("suspendConversionCompatibility.kt") public void testSuspendConversionCompatibility() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 8ca24c77de9..95c183f1b22 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -32222,6 +32222,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendAndFunConversionInDisabledMode.kt"); } + @Test + @TestMetadata("suspendCallFromAnonymousSuspend.kt") + public void testSuspendCallFromAnonymousSuspend() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt"); + } + @Test @TestMetadata("suspendConversionCompatibility.kt") public void testSuspendConversionCompatibility() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index d199a7a6c58..24cd4be6c06 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -32318,6 +32318,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendAndFunConversionInDisabledMode.kt"); } + @Test + @TestMetadata("suspendCallFromAnonymousSuspend.kt") + public void testSuspendCallFromAnonymousSuspend() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt"); + } + @Test @TestMetadata("suspendConversionCompatibility.kt") public void testSuspendConversionCompatibility() throws Exception { 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 87d53bb7178..5e8e8721f93 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 @@ -130,9 +130,12 @@ object FirSuspendCallChecker : FirQualifiedAccessExpressionChecker() { private fun findEnclosingSuspendFunction(context: CheckerContext): FirFunction? { return context.containingDeclarations.lastOrNull { when (it) { - is FirAnonymousFunction -> it.typeRef.coneType.isSuspendOrKSuspendFunctionType(context.session) - is FirSimpleFunction -> it.isSuspend - else -> false + is FirAnonymousFunction -> + if (it.isLambda) it.typeRef.coneType.isSuspendOrKSuspendFunctionType(context.session) else it.isSuspend + is FirSimpleFunction -> + it.isSuspend + else -> + false } } as? FirFunction } diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index ab978502e9a..b7bbd927bff 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -505,7 +505,7 @@ class FirElementSerializer private constructor( simpleFunction?.isInline == true, simpleFunction?.isTailRec == true, simpleFunction?.isExternal == true, - simpleFunction?.isSuspend == true, + function.isSuspend, simpleFunction?.isExpect == true, shouldSetStableParameterNames(function), ) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt index 5907958e45e..d647829e5a3 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirMetadataSerializer.kt @@ -227,6 +227,7 @@ private fun FirFunction.copyToFreeAnonymousFunction(approximator: AbstractTypeAp } }) typeParameters += typeParameterSet + status = function.status } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index a2b5387b98f..50b5a3e91cb 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -564,7 +564,7 @@ class Fir2IrDeclarationStorage( val visibility = simpleFunction?.visibility ?: Visibilities.Local val isSuspend = if (isLambda) ((function as FirAnonymousFunction).typeRef as? FirResolvedTypeRef)?.type?.isSuspendOrKSuspendFunctionType(session) == true - else simpleFunction?.isSuspend == true + else function.isSuspend val created = function.convertWithOffsets { startOffset, endOffset -> val result = declareIrSimpleFunction(signature) { symbol -> classifierStorage.preCacheTypeParameters(function, symbol) diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index 7872e303fa0..c089f8f1f59 100644 --- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -1660,6 +1660,9 @@ class DeclarationsConverter( label = context.getLastLabel(functionDeclaration) val labelName = label?.name ?: context.calleeNamesForLambda.lastOrNull()?.identifier target = FirFunctionTarget(labelName = labelName, isLambda = false) + if (modifiers.hasSuspend()) { + status = FirResolvedDeclarationStatusImpl.DEFAULT_STATUS_FOR_SUSPEND_FUNCTION_EXPRESSION + } } } else { val functionName = identifier.nameAsSafeName() diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 4803a25dd5f..f70694409c9 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -1441,6 +1441,9 @@ open class RawFirBuilder( hasExplicitParameterList = true label = context.getLastLabel(function) labelName = label?.name ?: context.calleeNamesForLambda.lastOrNull()?.identifier + if (function.hasModifier(SUSPEND_KEYWORD)) { + status = FirResolvedDeclarationStatusImpl.DEFAULT_STATUS_FOR_SUSPEND_FUNCTION_EXPRESSION + } } } else { FirSimpleFunctionBuilder().apply { diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousFunctionBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousFunctionBuilder.kt index 4501cc64e38..d57be218ace 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousFunctionBuilder.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/builder/FirAnonymousFunctionBuilder.kt @@ -59,6 +59,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu override lateinit var moduleData: FirModuleData override lateinit var origin: FirDeclarationOrigin override var attributes: FirDeclarationAttributes = FirDeclarationAttributes() + override var status: FirDeclarationStatus = FirResolvedDeclarationStatusImpl.DEFAULT_STATUS_FOR_STATUSLESS_DECLARATIONS override lateinit var returnTypeRef: FirTypeRef var receiverParameter: FirReceiverParameter? = null override var deprecationsProvider: DeprecationsProvider = UnresolvedDeprecationProvider @@ -86,6 +87,7 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu moduleData, origin, attributes, + status, returnTypeRef, receiverParameter, deprecationsProvider, @@ -107,13 +109,6 @@ class FirAnonymousFunctionBuilder : FirFunctionBuilder, FirAnnotationContainerBu ) } - - @Deprecated("Modification of 'status' has no impact for FirAnonymousFunctionBuilder", level = DeprecationLevel.HIDDEN) - override var status: FirDeclarationStatus - get() = throw IllegalStateException() - set(_) { - throw IllegalStateException() - } } @OptIn(ExperimentalContracts::class) @@ -136,6 +131,7 @@ inline fun buildAnonymousFunctionCopy(original: FirAnonymousFunction, init: FirA copyBuilder.moduleData = original.moduleData copyBuilder.origin = original.origin copyBuilder.attributes = original.attributes.copy() + copyBuilder.status = original.status copyBuilder.returnTypeRef = original.returnTypeRef copyBuilder.receiverParameter = original.receiverParameter copyBuilder.deprecationsProvider = original.deprecationsProvider diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt index fa16e33cfa5..f073d813b65 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/declarations/impl/FirAnonymousFunctionImpl.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.InlineStatus import org.jetbrains.kotlin.fir.declarations.asResolveState -import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -50,6 +49,7 @@ internal class FirAnonymousFunctionImpl( override val moduleData: FirModuleData, override val origin: FirDeclarationOrigin, override val attributes: FirDeclarationAttributes, + override var status: FirDeclarationStatus, override var returnTypeRef: FirTypeRef, override var receiverParameter: FirReceiverParameter?, override var deprecationsProvider: DeprecationsProvider, @@ -69,8 +69,6 @@ internal class FirAnonymousFunctionImpl( override val typeParameters: MutableList, override var typeRef: FirTypeRef, ) : FirAnonymousFunction() { - override var status: FirDeclarationStatus = FirResolvedDeclarationStatusImpl.DEFAULT_STATUS_FOR_STATUSLESS_DECLARATIONS - init { symbol.bind(this) @OptIn(ResolveStateAccess::class) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt index b694f9b7af4..d19eb549546 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirResolvedDeclarationStatusImpl.kt @@ -23,6 +23,11 @@ class FirResolvedDeclarationStatusImpl( Modality.FINAL, EffectiveVisibility.Public ) + val DEFAULT_STATUS_FOR_SUSPEND_FUNCTION_EXPRESSION = FirResolvedDeclarationStatusImpl( + Visibilities.Local, + Modality.FINAL, + EffectiveVisibility.Public + ).apply { isSuspend = true } } internal constructor( diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirAllModifierRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirAllModifierRenderer.kt index 8e656ce351a..29fb76da007 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirAllModifierRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirAllModifierRenderer.kt @@ -96,4 +96,10 @@ class FirAllModifierRenderer : FirModifierRenderer() { renderModifier("external") } } + + override fun renderModifiers(anonymousFunction: FirAnonymousFunction) { + if (anonymousFunction.isSuspend) { + renderModifier("suspend") + } + } } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirModifierRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirModifierRenderer.kt index 4b1e500591d..9db9c02f02d 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirModifierRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirModifierRenderer.kt @@ -22,6 +22,7 @@ abstract class FirModifierRenderer { abstract fun renderModifiers(backingField: FirBackingField) abstract fun renderModifiers(constructor: FirConstructor) abstract fun renderModifiers(propertyAccessor: FirPropertyAccessor) + abstract fun renderModifiers(anonymousFunction: FirAnonymousFunction) open fun renderModifiers(valueParameter: FirValueParameter) { if (valueParameter.isCrossinline) { renderModifier("crossinline") diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirPartialModifierRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirPartialModifierRenderer.kt index a108a995d43..db1818b0138 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirPartialModifierRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/renderer/FirPartialModifierRenderer.kt @@ -57,4 +57,10 @@ class FirPartialModifierRenderer : FirModifierRenderer() { override fun renderModifiers(propertyAccessor: FirPropertyAccessor) { } + + override fun renderModifiers(anonymousFunction: FirAnonymousFunction) { + if (anonymousFunction.isSuspend) { + renderModifier("suspend") + } + } } 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 494c7e990ed..03f1edf0a76 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 @@ -388,6 +388,7 @@ class FirRenderer( override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) { annotationRenderer?.render(anonymousFunction) + modifierRenderer?.renderModifiers(anonymousFunction) declarationRenderer?.render(anonymousFunction) print(" ") val receiverParameter = anonymousFunction.receiverParameter diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt index 6a0ca9e30b8..40d4f459981 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/BuilderConfigurator.kt @@ -271,8 +271,9 @@ object BuilderConfigurator : AbstractBuilderConfigurator(FirTree defaultNull("invocationKind", "label", "body", "controlFlowGraphReference") default("inlineStatus", "InlineStatus.Unknown") default("contractDescription", "FirEmptyContractDescription") + default("status", "FirResolvedDeclarationStatusImpl.DEFAULT_STATUS_FOR_STATUSLESS_DECLARATIONS") withCopy() - useTypes(emptyContractDescriptionType) + useTypes(emptyContractDescriptionType, resolvedDeclarationStatusImport) } builder(propertyAccessor) { 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 b1637497821..b5540269065 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 @@ -565,7 +565,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() impl(contractElementDeclaration) val implementationsWithoutStatusAndTypeParameters = listOf( - "FirAnonymousFunctionImpl", "FirValueParameterImpl", "FirDefaultSetterValueParameter", "FirErrorPropertyImpl", @@ -582,7 +581,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() configureFieldInAllImplementations( "typeParameters", - implementationPredicate = { it.type != "FirAnonymousFunctionImpl" && it.type in implementationsWithoutStatusAndTypeParameters } + implementationPredicate = { it.type in implementationsWithoutStatusAndTypeParameters } ) { defaultEmptyList(it) useTypes(resolvedDeclarationStatusImplType) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/importables.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/importables.kt index 0fc115cf5fc..b2f5182d072 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/importables.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/importables.kt @@ -9,4 +9,5 @@ import org.jetbrains.kotlin.fir.tree.generator.model.ArbitraryImportable val phaseAsResolveStateExtentionImport = ArbitraryImportable("org.jetbrains.kotlin.fir.declarations", "asResolveState") val resolvePhaseExtensionImport = ArbitraryImportable("org.jetbrains.kotlin.fir.declarations", "resolvePhase") -val resolveStateAccessImport = ArbitraryImportable("org.jetbrains.kotlin.fir.declarations", "ResolveStateAccess") \ No newline at end of file +val resolveStateAccessImport = ArbitraryImportable("org.jetbrains.kotlin.fir.declarations", "ResolveStateAccess") +val resolvedDeclarationStatusImport = ArbitraryImportable("org.jetbrains.kotlin.fir.declarations.impl", "FirResolvedDeclarationStatusImpl") \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.fir.txt b/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.fir.txt new file mode 100644 index 00000000000..7ec44f61bc3 --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.fir.txt @@ -0,0 +1,9 @@ +FILE: suspendCallFromAnonymousSuspend.kt + public final fun foo(): R|kotlin/Unit| { + suspend fun (): R|kotlin/Unit| { + R|/bar|() + } + + } + public final suspend fun bar(): R|kotlin/Unit| { + } diff --git a/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt b/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt new file mode 100644 index 00000000000..1422c53713e --- /dev/null +++ b/compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt @@ -0,0 +1,12 @@ +// FIR_IDENTICAL +// FIR_DUMP + +fun foo() { + suspend fun() { + bar() + } +} + +suspend fun bar() { + +} diff --git a/compiler/testData/ir/irText/firProblems/LocalSuspendFun.kt b/compiler/testData/ir/irText/firProblems/LocalSuspendFun.kt index a8b18050e64..a052dd36cf8 100644 --- a/compiler/testData/ir/irText/firProblems/LocalSuspendFun.kt +++ b/compiler/testData/ir/irText/firProblems/LocalSuspendFun.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // ISSUE: KT-58332 fun foo() { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index f6e546c8458..c5e1bdcf248 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -33090,6 +33090,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendAndFunConversionInDisabledMode.kt"); } + @Test + @TestMetadata("suspendCallFromAnonymousSuspend.kt") + public void testSuspendCallFromAnonymousSuspend() throws Exception { + runTest("compiler/testData/diagnostics/tests/suspendConversion/suspendCallFromAnonymousSuspend.kt"); + } + @Test @TestMetadata("suspendConversionCompatibility.kt") public void testSuspendConversionCompatibility() throws Exception {