From 3eb0745b58f1c35834e361d112c5a5b1053edc66 Mon Sep 17 00:00:00 2001 From: Andrei Klunnyi Date: Thu, 17 Dec 2020 15:46:17 +0100 Subject: [PATCH] KTIJ-650 [Code completion]: "sealed interface" is for 1.5+ only --- .../org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt | 2 ++ idea/idea-completion/testData/keywords/AfterClassProperty.kt | 2 ++ idea/idea-completion/testData/keywords/AfterClasses.kt | 2 ++ .../testData/keywords/AfterClasses_LangLevel10.kt | 2 -- .../testData/keywords/AfterClasses_LangLevel11.kt | 2 -- idea/idea-completion/testData/keywords/AfterFuns.kt | 2 ++ .../testData/keywords/GlobalPropertyAccessors.kt | 2 ++ .../idea-completion/testData/keywords/InAnnotationClassScope.kt | 2 ++ idea/idea-completion/testData/keywords/InClassBeforeFun.kt | 2 ++ idea/idea-completion/testData/keywords/InClassScope.kt | 2 ++ idea/idea-completion/testData/keywords/InEnumScope2.kt | 2 ++ idea/idea-completion/testData/keywords/InInterfaceScope.kt | 2 ++ idea/idea-completion/testData/keywords/InObjectScope.kt | 2 ++ .../idea-completion/testData/keywords/InTopScopeAfterPackage.kt | 2 ++ idea/idea-completion/testData/keywords/PropertyAccessors.kt | 2 ++ idea/idea-completion/testData/keywords/PropertyAccessors2.kt | 2 ++ idea/idea-completion/testData/keywords/PropertySetter.kt | 2 ++ idea/idea-completion/testData/keywords/SealedWithName.kt | 2 ++ idea/idea-completion/testData/keywords/SealedWithoutName.kt | 2 ++ idea/idea-completion/testData/keywords/TopScope.kt | 2 ++ idea/idea-completion/testData/keywords/TopScope3-.kt | 2 ++ idea/idea-completion/testData/keywords/topScope2.kt | 2 ++ 22 files changed, 40 insertions(+), 4 deletions(-) diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt index 9317092d4fe..3e5c75b2491 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordCompletion.kt @@ -122,11 +122,13 @@ object KeywordCompletion { fun complete(position: PsiElement, prefixMatcher: PrefixMatcher, isJvmModule: Boolean, consumer: (LookupElement) -> Unit) { if (!GENERAL_FILTER.isAcceptable(position, position)) return + val sealedInterfacesEnabled = position.languageVersionSettings.supportsFeature(LanguageFeature.SealedInterfaces) val parserFilter = buildFilter(position) for (keywordToken in ALL_KEYWORDS) { val nextKeywords = keywordToken.getNextPossibleKeywords(position) ?: setOf(null) nextKeywords.forEach { + if (keywordToken == SEALED_KEYWORD && it == INTERFACE_KEYWORD && !sealedInterfacesEnabled) return@forEach handleCompoundKeyword(position, keywordToken, it, isJvmModule, prefixMatcher, parserFilter, consumer) } } diff --git a/idea/idea-completion/testData/keywords/AfterClassProperty.kt b/idea/idea-completion/testData/keywords/AfterClassProperty.kt index 788cee4e10a..cb2c81431a1 100644 --- a/idea/idea-completion/testData/keywords/AfterClassProperty.kt +++ b/idea/idea-completion/testData/keywords/AfterClassProperty.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class MouseMovedEventArgs { public val X : Int = 0 diff --git a/idea/idea-completion/testData/keywords/AfterClasses.kt b/idea/idea-completion/testData/keywords/AfterClasses.kt index 6d16b266393..9a68457c1bc 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class A { fun foo() { bar() diff --git a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel10.kt b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel10.kt index d6dd4d72438..17727796838 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel10.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel10.kt @@ -33,8 +33,6 @@ class B { // EXIST: infix // EXIST: sealed class // EXIST: sealed class AfterClasses_LangLevel10 -// EXIST: sealed interface AfterClasses_LangLevel10 -// EXIST: sealed interface // EXIST: data class // EXIST: { "lookupString":"data class", "itemText":"data class", "tailText":" AfterClasses_LangLevel10(...)", "attributes":"bold" } // EXIST: inline diff --git a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt index 7263e242a82..24bbfe25aad 100644 --- a/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt +++ b/idea/idea-completion/testData/keywords/AfterClasses_LangLevel11.kt @@ -33,8 +33,6 @@ class B { // EXIST: infix // EXIST: sealed class // EXIST: sealed class AfterClasses_LangLevel11 -// EXIST: sealed interface AfterClasses_LangLevel11 -// EXIST: sealed interface // EXIST: data class // EXIST: { "lookupString":"data class", "itemText":"data class", "tailText":" AfterClasses_LangLevel11(...)", "attributes":"bold" } // EXIST: inline diff --git a/idea/idea-completion/testData/keywords/AfterFuns.kt b/idea/idea-completion/testData/keywords/AfterFuns.kt index 3f915220f47..6b35b3680da 100644 --- a/idea/idea-completion/testData/keywords/AfterFuns.kt +++ b/idea/idea-completion/testData/keywords/AfterFuns.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class A { fun foo() { bar() diff --git a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt index ab7873fa77e..fe02a7cc9c2 100644 --- a/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/GlobalPropertyAccessors.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + fun foo() { bar() } diff --git a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt index cc49effaff9..35d9db37c7f 100644 --- a/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt +++ b/idea/idea-completion/testData/keywords/InAnnotationClassScope.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + annotation class Test { } diff --git a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt index ebc5751c42d..27161fe28ae 100644 --- a/idea/idea-completion/testData/keywords/InClassBeforeFun.kt +++ b/idea/idea-completion/testData/keywords/InClassBeforeFun.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + public class Test { diff --git a/idea/idea-completion/testData/keywords/InClassScope.kt b/idea/idea-completion/testData/keywords/InClassScope.kt index de5a03acfe6..863eb38b6ca 100644 --- a/idea/idea-completion/testData/keywords/InClassScope.kt +++ b/idea/idea-completion/testData/keywords/InClassScope.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class TestClass { } diff --git a/idea/idea-completion/testData/keywords/InEnumScope2.kt b/idea/idea-completion/testData/keywords/InEnumScope2.kt index 2251838ea0f..f21931454f6 100644 --- a/idea/idea-completion/testData/keywords/InEnumScope2.kt +++ b/idea/idea-completion/testData/keywords/InEnumScope2.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + enum class Test { ; diff --git a/idea/idea-completion/testData/keywords/InInterfaceScope.kt b/idea/idea-completion/testData/keywords/InInterfaceScope.kt index 11689d4e8de..b553f51cdb0 100644 --- a/idea/idea-completion/testData/keywords/InInterfaceScope.kt +++ b/idea/idea-completion/testData/keywords/InInterfaceScope.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + interface Test { } diff --git a/idea/idea-completion/testData/keywords/InObjectScope.kt b/idea/idea-completion/testData/keywords/InObjectScope.kt index 8f8fc86717b..291e5607b94 100644 --- a/idea/idea-completion/testData/keywords/InObjectScope.kt +++ b/idea/idea-completion/testData/keywords/InObjectScope.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + object Test { } diff --git a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt index 282b0c8d8df..e3c85bb5a96 100644 --- a/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt +++ b/idea/idea-completion/testData/keywords/InTopScopeAfterPackage.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + package Test diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors.kt b/idea/idea-completion/testData/keywords/PropertyAccessors.kt index 8a6e6ace135..f52b8114536 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class Some { var a : Int diff --git a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt index 269f3f45e15..31e4eb9ae7f 100644 --- a/idea/idea-completion/testData/keywords/PropertyAccessors2.kt +++ b/idea/idea-completion/testData/keywords/PropertyAccessors2.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class Some { var a : Int = 1 diff --git a/idea/idea-completion/testData/keywords/PropertySetter.kt b/idea/idea-completion/testData/keywords/PropertySetter.kt index f950db00539..fc6e6b730b2 100644 --- a/idea/idea-completion/testData/keywords/PropertySetter.kt +++ b/idea/idea-completion/testData/keywords/PropertySetter.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class Some { var a : Int get() = 0 diff --git a/idea/idea-completion/testData/keywords/SealedWithName.kt b/idea/idea-completion/testData/keywords/SealedWithName.kt index 345a354e786..5487c20aaab 100644 --- a/idea/idea-completion/testData/keywords/SealedWithName.kt +++ b/idea/idea-completion/testData/keywords/SealedWithName.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + seal // EXIST: "sealed class SealedWithName" // EXIST: "sealed interface SealedWithName" diff --git a/idea/idea-completion/testData/keywords/SealedWithoutName.kt b/idea/idea-completion/testData/keywords/SealedWithoutName.kt index de4abff9998..8bef92d7f4e 100644 --- a/idea/idea-completion/testData/keywords/SealedWithoutName.kt +++ b/idea/idea-completion/testData/keywords/SealedWithoutName.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + class OuterClass { seal } diff --git a/idea/idea-completion/testData/keywords/TopScope.kt b/idea/idea-completion/testData/keywords/TopScope.kt index 47b03855278..6b8ea73b427 100644 --- a/idea/idea-completion/testData/keywords/TopScope.kt +++ b/idea/idea-completion/testData/keywords/TopScope.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + // EXIST: abstract diff --git a/idea/idea-completion/testData/keywords/TopScope3-.kt b/idea/idea-completion/testData/keywords/TopScope3-.kt index 63e8eaf6465..fd56753c3b5 100644 --- a/idea/idea-completion/testData/keywords/TopScope3-.kt +++ b/idea/idea-completion/testData/keywords/TopScope3-.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + // EXIST: abstract diff --git a/idea/idea-completion/testData/keywords/topScope2.kt b/idea/idea-completion/testData/keywords/topScope2.kt index 63e8eaf6465..fd56753c3b5 100644 --- a/idea/idea-completion/testData/keywords/topScope2.kt +++ b/idea/idea-completion/testData/keywords/topScope2.kt @@ -1,3 +1,5 @@ +// COMPILER_ARGUMENTS: -XXLanguage:+SealedInterfaces -XXLanguage:+MultiPlatformProjects + // EXIST: abstract