Added language feature check for inline properties

This commit is contained in:
Mikhael Bogdanov
2016-06-22 15:31:46 +03:00
parent 321e97a329
commit 853c4d4453
5 changed files with 32 additions and 3 deletions
@@ -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 {
@@ -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<KotlinTarget>
): 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
}
}
@@ -0,0 +1,11 @@
// !LANGUAGE: -InlineProperties
var value: Int = 0
<!UNSUPPORTED_FEATURE!>inline<!> var z: Int
get() = ++value
set(p: Int) { value = p }
var z2: Int
<!UNSUPPORTED_FEATURE!>inline<!> get() = ++value
<!UNSUPPORTED_FEATURE!>inline<!> set(p: Int) { value = p }
@@ -0,0 +1,5 @@
package
public var value: kotlin.Int
public var z: kotlin.Int
public var z2: kotlin.Int
@@ -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");