From 73e1ddc505cb921872f087f38b9e971fc1c10857 Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 7 Apr 2020 01:25:55 +0300 Subject: [PATCH] Allow Result as a return type if one enabled inline classes explicitly #KT-38042 Fixed --- .../checkers/ResultClassInReturnTypeChecker.kt | 2 +- compiler/testData/cli/jvm/resultInReturnType.kt | 1 + .../resultInReturnTypeUnsupportedByDefault14.args | 5 +++++ .../resultInReturnTypeUnsupportedByDefault14.out | 4 ++++ ...esultInReturnTypeWithEnabledInlineClasses.args | 4 ++++ ...resultInReturnTypeWithEnabledInlineClasses.out | 1 + ...ultInReturnTypeWithEnabledInlineClassesXX.args | 4 ++++ ...sultInReturnTypeWithEnabledInlineClassesXX.out | 10 ++++++++++ .../jetbrains/kotlin/cli/CliTestGenerated.java | 15 +++++++++++++++ 9 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/cli/jvm/resultInReturnType.kt create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.args create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.out create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.args create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.out create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.args create mode 100644 compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.out diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ResultClassInReturnTypeChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ResultClassInReturnTypeChecker.kt index 2fb65fb1d3e..d904b1e2886 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ResultClassInReturnTypeChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ResultClassInReturnTypeChecker.kt @@ -22,7 +22,7 @@ class ResultClassInReturnTypeChecker : DeclarationChecker { val languageVersionSettings = context.languageVersionSettings if ( languageVersionSettings.getFlag(AnalysisFlags.allowResultReturnType) || - languageVersionSettings.supportsFeature(LanguageFeature.InlineClasses) && + languageVersionSettings.getFeatureSupport(LanguageFeature.InlineClasses) == LanguageFeature.State.ENABLED && languageVersionSettings.supportsFeature(LanguageFeature.AllowResultInReturnType) ) return diff --git a/compiler/testData/cli/jvm/resultInReturnType.kt b/compiler/testData/cli/jvm/resultInReturnType.kt new file mode 100644 index 00000000000..fa82d84bbe1 --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnType.kt @@ -0,0 +1 @@ +fun foo() = Result.success(42) \ No newline at end of file diff --git a/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.args b/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.args new file mode 100644 index 00000000000..8983249ed93 --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.args @@ -0,0 +1,5 @@ +$TESTDATA_DIR$/resultInReturnType.kt +-d +$TEMP_DIR$ +-language-version +1.4 \ No newline at end of file diff --git a/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.out b/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.out new file mode 100644 index 00000000000..0e1d610cb16 --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.out @@ -0,0 +1,4 @@ +compiler/testData/cli/jvm/resultInReturnType.kt:1:5: error: 'kotlin.Result' cannot be used as a return type +fun foo() = Result.success(42) + ^ +COMPILATION_ERROR diff --git a/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.args b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.args new file mode 100644 index 00000000000..6598ccb687b --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.args @@ -0,0 +1,4 @@ +$TESTDATA_DIR$/resultInReturnType.kt +-d +$TEMP_DIR$ +-Xinline-classes \ No newline at end of file diff --git a/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.out b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.out new file mode 100644 index 00000000000..d86bac9de59 --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.out @@ -0,0 +1 @@ +OK diff --git a/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.args b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.args new file mode 100644 index 00000000000..48f2868f4c2 --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.args @@ -0,0 +1,4 @@ +$TESTDATA_DIR$/resultInReturnType.kt +-d +$TEMP_DIR$ +-XXLanguage\:+InlineClasses \ No newline at end of file diff --git a/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.out b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.out new file mode 100644 index 00000000000..9ac07a0980f --- /dev/null +++ b/compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.out @@ -0,0 +1,10 @@ +warning: ATTENTION! +This build uses unsafe internal compiler arguments: + +-XXLanguage:+InlineClasses + +This mode is not recommended for production use, +as no stability/compatibility guarantees are given on +compiler or generated code. Use it at your own risk! + +OK diff --git a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java index 6c6ffec0b31..075d1d727a9 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -615,6 +615,21 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/jvm/releaseCoroutinesApiVersion1.2.args"); } + @TestMetadata("resultInReturnTypeUnsupportedByDefault14.args") + public void testResultInReturnTypeUnsupportedByDefault14() throws Exception { + runTest("compiler/testData/cli/jvm/resultInReturnTypeUnsupportedByDefault14.args"); + } + + @TestMetadata("resultInReturnTypeWithEnabledInlineClasses.args") + public void testResultInReturnTypeWithEnabledInlineClasses() throws Exception { + runTest("compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClasses.args"); + } + + @TestMetadata("resultInReturnTypeWithEnabledInlineClassesXX.args") + public void testResultInReturnTypeWithEnabledInlineClassesXX() throws Exception { + runTest("compiler/testData/cli/jvm/resultInReturnTypeWithEnabledInlineClassesXX.args"); + } + @TestMetadata("returnAsWhenKey.args") public void testReturnAsWhenKey() throws Exception { runTest("compiler/testData/cli/jvm/returnAsWhenKey.args");