FE 1.0: Make 'suspend fun', where 'suspend' is not builtin error in 1.8

#KT-49264 Fixed
This commit is contained in:
Ilmir Usmanov
2022-03-29 06:44:03 +02:00
committed by teamcity
parent 1c2604a95e
commit f75a8109d2
9 changed files with 45 additions and 5 deletions
@@ -6540,6 +6540,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/coroutines"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
}
@Test
@TestMetadata("modifierFormBuiltinSuspendFun.kt")
public void testModifierFormBuiltinSuspendFun() throws Exception {
runTest("compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt");
}
@Test
@TestMetadata("suspendInvokeInsideTry.kt")
public void testSuspendInvokeInsideTry() throws Exception {
@@ -6540,6 +6540,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/coroutines"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
}
@Test
@TestMetadata("modifierFormBuiltinSuspendFun.kt")
public void testModifierFormBuiltinSuspendFun() throws Exception {
runTest("compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt");
}
@Test
@TestMetadata("suspendInvokeInsideTry.kt")
public void testSuspendInvokeInsideTry() throws Exception {
@@ -6540,6 +6540,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/coroutines"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
}
@Test
@TestMetadata("modifierFormBuiltinSuspendFun.kt")
public void testModifierFormBuiltinSuspendFun() throws Exception {
runTest("compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt");
}
@Test
@TestMetadata("suspendInvokeInsideTry.kt")
public void testSuspendInvokeInsideTry() throws Exception {
@@ -1290,7 +1290,8 @@ public interface Errors {
DiagnosticFactory0<PsiElement> NON_MODIFIER_FORM_FOR_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<KtReturnExpression> RETURN_FOR_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR);
DiagnosticFactory0<PsiElement> MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN = DiagnosticFactory0.create(WARNING);
DiagnosticFactoryForDeprecation0<PsiElement> MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN =
DiagnosticFactoryForDeprecation0.create(LanguageFeature.ModifierNonBuiltinSuspendFunError);
DiagnosticFactory1<PsiElement, RenderedDiagnostic<?>> PLUGIN_ERROR = DiagnosticFactory1.create(ERROR);
DiagnosticFactory1<PsiElement, RenderedDiagnostic<?>> PLUGIN_WARNING = DiagnosticFactory1.create(WARNING);
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.resolve.calls.checkers
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.calls.util.isInfixCall
@@ -38,7 +39,9 @@ object LambdaWithSuspendModifierCallChecker : CallChecker {
context.trace.report(Errors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND.on(reportOn))
} else {
require(call.isInfixWithRightFun())
context.trace.report(Errors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN.on(reportOn))
context.trace.report(
Errors.MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN.on(context.languageVersionSettings, reportOn)
)
}
}
}
@@ -0,0 +1,11 @@
// LANGUAGE: +ModifierNonBuiltinSuspendFunError
// FIR_IDENTICAL
// SKIP_TXT
infix fun Int.suspend(c: () -> Unit) {}
fun foo() {
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN_ERROR!>suspend<!> fun () {}
1.suspend(fun () {})
}
@@ -3,7 +3,7 @@
infix fun Int.suspend(c: () -> Unit) { c() }
fun bar() {
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN!>suspend<!> fun() {
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN_WARNING!>suspend<!> fun() {
println()
}
@@ -11,7 +11,7 @@ fun bar() {
println()
}
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN!>suspend<!> @Ann fun() {
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN_WARNING!>suspend<!> @Ann fun() {
println()
}
}
@@ -21,7 +21,7 @@ fun bar() {
annotation class Ann
fun main(suspend: WLambdaInvoke) {
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN!>suspend<!> fun() {}
1 <!MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN_WARNING!>suspend<!> fun() {}
}
class WLambdaInvoke {
@@ -6546,6 +6546,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/tests/coroutines"), Pattern.compile("^(.*)\\.kts?$"), Pattern.compile("^(.+)\\.fir\\.kts?$"), true);
}
@Test
@TestMetadata("modifierFormBuiltinSuspendFun.kt")
public void testModifierFormBuiltinSuspendFun() throws Exception {
runTest("compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt");
}
@Test
@TestMetadata("suspendInvokeInsideTry.kt")
public void testSuspendInvokeInsideTry() throws Exception {
@@ -259,6 +259,7 @@ enum class LanguageFeature(
ReportMissingUpperBoundsViolatedErrorOnAbbreviationAtSupertypes(KOTLIN_1_8, kind = BUG_FIX), // KT-29168
IgnoreNullabilityForErasedValueParameters(KOTLIN_1_8, kind = BUG_FIX),
ForbidUsingExtensionPropertyTypeParameterInDelegate(KOTLIN_1_8, kind = BUG_FIX),
ModifierNonBuiltinSuspendFunError(KOTLIN_1_8),
// 1.9