From bbf52e8b90c358d700a63aaa480d53e3e5572699 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Mon, 16 May 2022 11:07:52 +0200 Subject: [PATCH] [FE 1.0] Make "Unit conversions" accessible experimental feature --- ...osisCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ .../FirOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...tendDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../calls/checkers/UnitConversionCallChecker.kt | 4 ++-- .../chainedFunSuspendUnitConversion.fir.kt | 2 +- .../chainedFunSuspendUnitConversion.kt | 2 +- .../chainedFunUnitConversion.fir.kt | 2 +- .../unitConversion/chainedFunUnitConversion.kt | 2 +- .../chainedUnitSuspendConversion.fir.kt | 2 +- .../chainedUnitSuspendConversion.kt | 2 +- .../tests/unitConversion/kt49394.fir.kt | 15 +++++++++++++++ .../diagnostics/tests/unitConversion/kt49394.kt | 15 +++++++++++++++ .../diagnostics/tests/unitConversion/kt49394.txt | 12 ++++++++++++ ...nitConversionDisabledForSimpleArguments.fir.kt | 2 +- .../unitConversionDisabledForSimpleArguments.kt | 2 +- .../unitConversionForAllKinds.fir.kt | 2 +- .../unitConversion/unitConversionForAllKinds.kt | 2 +- .../unitConversionForSubtypes.fir.kt | 2 +- .../unitConversion/unitConversionForSubtypes.kt | 2 +- .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ .../kotlin/config/LanguageVersionSettings.kt | 2 +- .../kotlin/native/test/debugger/LldbTests.kt | 2 +- 22 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/unitConversion/kt49394.fir.kt create mode 100644 compiler/testData/diagnostics/tests/unitConversion/kt49394.kt create mode 100644 compiler/testData/diagnostics/tests/unitConversion/kt49394.txt 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 1cf63e3a562..02d19bbc90e 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 @@ -32690,6 +32690,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt"); } + @Test + @TestMetadata("kt49394.kt") + public void testKt49394() throws Exception { + runTest("compiler/testData/diagnostics/tests/unitConversion/kt49394.kt"); + } + @Test @TestMetadata("noUnitConversionForGenericTypeFromArrow.kt") public void testNoUnitConversionForGenericTypeFromArrow() 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 89d9caad36a..7d63d4aa2f5 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 @@ -32690,6 +32690,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt"); } + @Test + @TestMetadata("kt49394.kt") + public void testKt49394() throws Exception { + runTest("compiler/testData/diagnostics/tests/unitConversion/kt49394.kt"); + } + @Test @TestMetadata("noUnitConversionForGenericTypeFromArrow.kt") public void testNoUnitConversionForGenericTypeFromArrow() 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 d1ca1c8e5d0..782a343f65c 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 @@ -32690,6 +32690,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt"); } + @Test + @TestMetadata("kt49394.kt") + public void testKt49394() throws Exception { + runTest("compiler/testData/diagnostics/tests/unitConversion/kt49394.kt"); + } + @Test @TestMetadata("noUnitConversionForGenericTypeFromArrow.kt") public void testNoUnitConversionForGenericTypeFromArrow() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/UnitConversionCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/UnitConversionCallChecker.kt index b541644a433..60177d75b70 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/UnitConversionCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/UnitConversionCallChecker.kt @@ -16,7 +16,7 @@ object UnitConversionCallChecker : CallChecker { override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) { if (resolvedCall !is NewResolvedCallImpl<*>) return - if (context.languageVersionSettings.supportsFeature(LanguageFeature.UnitConversion)) return + if (context.languageVersionSettings.supportsFeature(LanguageFeature.UnitConversionsOnArbitraryExpressions)) return // lambdas are working since 1.0, callable references are handled as part of reference adaptation // => here we're checking only simple argument @@ -26,7 +26,7 @@ object UnitConversionCallChecker : CallChecker { context.trace.report( Errors.UNSUPPORTED_FEATURE.on( argumentWithUnitConversion.psiCallArgument.valueArgument.asElement(), - LanguageFeature.UnitConversion to context.languageVersionSettings + LanguageFeature.UnitConversionsOnArbitraryExpressions to context.languageVersionSettings ) ) } diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.fir.kt index 1d630c5d007..1afd0d90134 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +SuspendConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun interface SuspendRunnable { diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.kt index 00306a46ef8..160f432f876 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedFunSuspendUnitConversion.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +SuspendConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun interface SuspendRunnable { diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.fir.kt index f16b065ee34..3dcdde3f356 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun interface KRunnable { diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.kt index d2cb49ee966..9d6f44f3ce9 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedFunUnitConversion.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun interface KRunnable { diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.fir.kt index e541778711c..719b611aba0 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +SuspendConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: suspend () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt b/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt index b0979e6a33f..470b5ac7d47 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +SuspendConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions +SuspendConversion // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: suspend () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/kt49394.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/kt49394.fir.kt new file mode 100644 index 00000000000..6cd4e560582 --- /dev/null +++ b/compiler/testData/diagnostics/tests/unitConversion/kt49394.fir.kt @@ -0,0 +1,15 @@ +fun interface Run { + fun run() +} + +fun handle(run: Run) { + //... +} + +val x = { + "STRING" +} + +fun test() { + handle(x) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/unitConversion/kt49394.kt b/compiler/testData/diagnostics/tests/unitConversion/kt49394.kt new file mode 100644 index 00000000000..aadb1a601bf --- /dev/null +++ b/compiler/testData/diagnostics/tests/unitConversion/kt49394.kt @@ -0,0 +1,15 @@ +fun interface Run { + fun run() +} + +fun handle(run: Run) { + //... +} + +val x = { + "STRING" +} + +fun test() { + handle(x) +} diff --git a/compiler/testData/diagnostics/tests/unitConversion/kt49394.txt b/compiler/testData/diagnostics/tests/unitConversion/kt49394.txt new file mode 100644 index 00000000000..7f77cf5432b --- /dev/null +++ b/compiler/testData/diagnostics/tests/unitConversion/kt49394.txt @@ -0,0 +1,12 @@ +package + +public val x: () -> kotlin.String +public fun handle(/*0*/ run: Run): kotlin.Unit +public fun test(): kotlin.Unit + +public fun interface Run { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract fun run(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.fir.kt index 947c2add77d..66dd8e9da13 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: -UnitConversion +// !LANGUAGE: -UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.kt index 81b379127c3..8a8302c33fc 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionDisabledForSimpleArguments.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: -UnitConversion +// !LANGUAGE: -UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.fir.kt index 706990943ce..97a7e755648 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.kt index 3049912bb4c..e67e6b7fba8 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForAllKinds.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: () -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.fir.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.fir.kt index ec8c5f742e4..c71ccde301d 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.fir.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: (Int, String) -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.kt b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.kt index f9ac6ccfaf7..973db5a9b2c 100644 --- a/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.kt +++ b/compiler/testData/diagnostics/tests/unitConversion/unitConversionForSubtypes.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: +UnitConversion +// !LANGUAGE: +UnitConversionsOnArbitraryExpressions // !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_EXPRESSION fun foo(f: (Int, String) -> Unit) {} 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 ba0893ea89a..2c5dc653e71 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 @@ -32780,6 +32780,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/unitConversion/chainedUnitSuspendConversion.kt"); } + @Test + @TestMetadata("kt49394.kt") + public void testKt49394() throws Exception { + runTest("compiler/testData/diagnostics/tests/unitConversion/kt49394.kt"); + } + @Test @TestMetadata("noUnitConversionForGenericTypeFromArrow.kt") public void testNoUnitConversionForGenericTypeFromArrow() 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 a776142cd79..1d22b293cf1 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -142,7 +142,6 @@ enum class LanguageFeature( SamConversionForKotlinFunctions(KOTLIN_1_4), SamConversionPerArgument(KOTLIN_1_4), FunctionReferenceWithDefaultValueAsOtherType(KOTLIN_1_4), - UnitConversion(KOTLIN_1_4, defaultState = State.DISABLED), OverloadResolutionByLambdaReturnType(KOTLIN_1_4), ContractsOnCallsWithImplicitReceiver(KOTLIN_1_4), BooleanElvisBoundSmartCasts(KOTLIN_1_3, defaultState = State.DISABLED), // see KT-26357 for details @@ -299,6 +298,7 @@ enum class LanguageFeature( GenericInlineClassParameter(sinceVersion = null, defaultState = State.ENABLED_WITH_WARNING, kind = UNSTABLE_FEATURE), ValueClasses(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE), JavaSamConversionEqualsHashCode(sinceVersion = null, defaultState = State.DISABLED, kind = UNSTABLE_FEATURE), + UnitConversionsOnArbitraryExpressions(sinceVersion = null, defaultState = State.DISABLED), ; val presentableName: String diff --git a/kotlin-native/backend.native/tests/debugger/src/test/kotlin/org/jetbrains/kotlin/native/test/debugger/LldbTests.kt b/kotlin-native/backend.native/tests/debugger/src/test/kotlin/org/jetbrains/kotlin/native/test/debugger/LldbTests.kt index e2ecf2a83a8..24bb8445805 100644 --- a/kotlin-native/backend.native/tests/debugger/src/test/kotlin/org/jetbrains/kotlin/native/test/debugger/LldbTests.kt +++ b/kotlin-native/backend.native/tests/debugger/src/test/kotlin/org/jetbrains/kotlin/native/test/debugger/LldbTests.kt @@ -343,7 +343,7 @@ class LldbTests { v() } """.feedOutput("kt42208-3.kt") - val binary = arrayOf(kt42208One, kt42208Two, kt42208Three).binary("kt42208", "-g", "-XXLanguage:+UnitConversion") + val binary = arrayOf(kt42208One, kt42208Two, kt42208Three).binary("kt42208", "-g", "-XXLanguage:+UnitConversionsOnArbitraryExpressions") """ > b kt42208-2.kt:5 > ${lldbCommandRunOrContinue()}