From f75a8109d20f4cb5b521a420488870a43a1485cb Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Tue, 29 Mar 2022 06:44:03 +0200 Subject: [PATCH] FE 1.0: Make 'suspend fun', where 'suspend' is not builtin error in 1.8 #KT-49264 Fixed --- ...iagnosisCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ .../FirOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...FrontendDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../src/org/jetbrains/kotlin/diagnostics/Errors.java | 3 ++- .../checkers/LambdaWithSuspendModifierCallChecker.kt | 5 ++++- .../tests/coroutines/modifierFormBuiltinSuspendFun.kt | 11 +++++++++++ .../coroutines/nonModifierFormForBuiltInWithFun.kt | 6 +++--- .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ .../kotlin/config/LanguageVersionSettings.kt | 1 + 9 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index d1e8782ec2c..5c31a2f7ffe 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -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 { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index fe40de0346f..5a78c7ff463 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -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 { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 497cfb2dfa9..b7684cc2957 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -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 { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index 8d1a392261c..26afe66774c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -1290,7 +1290,8 @@ public interface Errors { DiagnosticFactory0 NON_MODIFIER_FORM_FOR_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 RETURN_FOR_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND = DiagnosticFactory0.create(ERROR); - DiagnosticFactory0 MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN = DiagnosticFactory0.create(WARNING); + DiagnosticFactoryForDeprecation0 MODIFIER_FORM_FOR_NON_BUILT_IN_SUSPEND_FUN = + DiagnosticFactoryForDeprecation0.create(LanguageFeature.ModifierNonBuiltinSuspendFunError); DiagnosticFactory1> PLUGIN_ERROR = DiagnosticFactory1.create(ERROR); DiagnosticFactory1> PLUGIN_WARNING = DiagnosticFactory1.create(WARNING); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/LambdaWithSuspendModifierCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/LambdaWithSuspendModifierCallChecker.kt index 7c42fdcac14..29ad2c352c1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/LambdaWithSuspendModifierCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/LambdaWithSuspendModifierCallChecker.kt @@ -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) + ) } } } diff --git a/compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt b/compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt new file mode 100644 index 00000000000..e318b86d297 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/modifierFormBuiltinSuspendFun.kt @@ -0,0 +1,11 @@ +// LANGUAGE: +ModifierNonBuiltinSuspendFunError +// FIR_IDENTICAL +// SKIP_TXT + +infix fun Int.suspend(c: () -> Unit) {} + +fun foo() { + 1 suspend fun () {} + + 1.suspend(fun () {}) +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInWithFun.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInWithFun.kt index 8bc1d3a4f33..97a3c9a5b29 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInWithFun.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/nonModifierFormForBuiltInWithFun.kt @@ -3,7 +3,7 @@ infix fun Int.suspend(c: () -> Unit) { c() } fun bar() { - 1 suspend fun() { + 1 suspend fun() { println() } @@ -11,7 +11,7 @@ fun bar() { println() } - 1 suspend @Ann fun() { + 1 suspend @Ann fun() { println() } } @@ -21,7 +21,7 @@ fun bar() { annotation class Ann fun main(suspend: WLambdaInvoke) { - 1 suspend fun() {} + 1 suspend fun() {} } class WLambdaInvoke { 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 9728cf0eaa7..73373000e65 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 @@ -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 { diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 2effaeb92b7..6bd858db746 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -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