[FIR] Prohibit suspend anonymous functions in statement position

^KT-62018 Fixed
^KT-62019
This commit is contained in:
Dmitriy Novozhilov
2023-12-12 17:02:11 +02:00
committed by Space Team
parent cae6e0ee0f
commit fb00c1dfb6
23 changed files with 116 additions and 5 deletions
@@ -1691,6 +1691,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.ANONYMOUS_SUSPEND_FUNCTION) { firDiagnostic ->
AnonymousSuspendFunctionImpl(
firDiagnostic as KtPsiDiagnostic,
token,
)
}
add(FirErrors.VALUE_CLASS_NOT_TOP_LEVEL) { firDiagnostic ->
ValueClassNotTopLevelImpl(
firDiagnostic as KtPsiDiagnostic,
@@ -1220,6 +1220,10 @@ sealed interface KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = NoExplicitReturnTypeInApiModeWarning::class
}
interface AnonymousSuspendFunction : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = AnonymousSuspendFunction::class
}
interface ValueClassNotTopLevel : KtFirDiagnostic<KtDeclaration> {
override val diagnosticClass get() = ValueClassNotTopLevel::class
}
@@ -1460,6 +1460,11 @@ internal class NoExplicitReturnTypeInApiModeWarningImpl(
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.NoExplicitReturnTypeInApiModeWarning
internal class AnonymousSuspendFunctionImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
) : KtAbstractFirDiagnostic<KtDeclaration>(firDiagnostic, token), KtFirDiagnostic.AnonymousSuspendFunction
internal class ValueClassNotTopLevelImpl(
firDiagnostic: KtPsiDiagnostic,
token: KtLifetimeToken,
@@ -2027,6 +2027,12 @@ public class DiagnosticCompilerTestFirTestdataTestGenerated extends AbstractDiag
runTest("compiler/fir/analysis-tests/testData/resolve/diagnostics/supertypeInitializedWithoutPrimaryConstructor.kt");
}
@Test
@TestMetadata("suspendAnonymousFunction.kt")
public void testSuspendAnonymousFunction() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/diagnostics/suspendAnonymousFunction.kt");
}
@Test
@TestMetadata("testIllegalAnnotationClass.kt")
public void testTestIllegalAnnotationClass() throws Exception {
@@ -2027,6 +2027,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFirTestDataTestGenerated
runTest("compiler/fir/analysis-tests/testData/resolve/diagnostics/supertypeInitializedWithoutPrimaryConstructor.kt");
}
@Test
@TestMetadata("suspendAnonymousFunction.kt")
public void testSuspendAnonymousFunction() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/diagnostics/suspendAnonymousFunction.kt");
}
@Test
@TestMetadata("testIllegalAnnotationClass.kt")
public void testTestIllegalAnnotationClass() throws Exception {