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");