From 853c4d44534e37be3aa55fdf81c6346c9ac82cda Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 22 Jun 2016 15:31:46 +0300 Subject: [PATCH] Added language feature check for inline properties --- .../kotlin/config/LanguageFeatureSettings.kt | 1 + .../org/jetbrains/kotlin/resolve/ModifiersChecker.kt | 12 +++++++++--- .../tests/sourceCompatibility/noInlineProperty.kt | 11 +++++++++++ .../tests/sourceCompatibility/noInlineProperty.txt | 5 +++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 6 ++++++ 5 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.kt create mode 100644 compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/config/LanguageFeatureSettings.kt b/compiler/frontend/src/org/jetbrains/kotlin/config/LanguageFeatureSettings.kt index c588ea66396..794984d0cbb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/config/LanguageFeatureSettings.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/config/LanguageFeatureSettings.kt @@ -27,6 +27,7 @@ enum class LanguageFeature(val sinceVersion: LanguageVersion) { Coroutines(KOTLIN_1_1), AdditionalBuiltInsMembers(KOTLIN_1_1), DataClassInheritance(KOTLIN_1_1), + InlineProperties(KOTLIN_1_1) ; companion object { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt index e463ab20053..997ef1c989d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/ModifiersChecker.kt @@ -94,7 +94,8 @@ object ModifierCheckerCore { val featureDependencies = mapOf( COROUTINE_KEYWORD to LanguageFeature.Coroutines, - SUSPEND_KEYWORD to LanguageFeature.Coroutines + SUSPEND_KEYWORD to LanguageFeature.Coroutines, + INLINE_KEYWORD to LanguageFeature.InlineProperties ) // NOTE: deprecated targets must be possible! @@ -252,12 +253,17 @@ object ModifierCheckerCore { private fun checkLanguageLevelSupport( trace: BindingTrace, node: ASTNode, - languageFeatureSettings: LanguageFeatureSettings + languageFeatureSettings: LanguageFeatureSettings, + actualTargets: List ): Boolean { val modifier = node.elementType as KtModifierKeywordToken + val dependency = featureDependencies[modifier] ?: return true if (!languageFeatureSettings.supportsFeature(dependency)) { + if (dependency == LanguageFeature.InlineProperties && actualTargets.size == 1 && actualTargets.contains(FUNCTION)) { + return true + } trace.report(Errors.UNSUPPORTED_FEATURE.on(node.psi, dependency)) return false } @@ -313,7 +319,7 @@ object ModifierCheckerCore { else if (!checkParent(trace, second, parentDescriptor)) { incorrectNodes += second } - else if (!checkLanguageLevelSupport(trace, second, languageFeatureSettings)) { + else if (!checkLanguageLevelSupport(trace, second, languageFeatureSettings, actualTargets)) { incorrectNodes += second } } diff --git a/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.kt b/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.kt new file mode 100644 index 00000000000..c32b312825c --- /dev/null +++ b/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.kt @@ -0,0 +1,11 @@ +// !LANGUAGE: -InlineProperties +var value: Int = 0 + +inline var z: Int + get() = ++value + set(p: Int) { value = p } + + +var z2: Int + inline get() = ++value + inline set(p: Int) { value = p } diff --git a/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.txt b/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.txt new file mode 100644 index 00000000000..6c6dd1f87f0 --- /dev/null +++ b/compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.txt @@ -0,0 +1,5 @@ +package + +public var value: kotlin.Int +public var z: kotlin.Int +public var z2: kotlin.Int diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 6a1f40a2e7e..868133f9479 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -18660,6 +18660,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("noInlineProperty.kt") + public void testNoInlineProperty() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/sourceCompatibility/noInlineProperty.kt"); + doTest(fileName); + } + @TestMetadata("noLocalDelegatedProperty.kt") public void testNoLocalDelegatedProperty() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/sourceCompatibility/noLocalDelegatedProperty.kt");