diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt index 3ea800243bd..7685689c4c6 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/BasicCompletionSession.kt @@ -274,7 +274,7 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, KeywordValues.process(keywordValueConsumer, callTypeAndReceiver, bindingContext, resolutionFacade, moduleDescriptor, isJvmModule) val keywordsPrefix = prefix.substringBefore('@') // if there is '@' in the prefix - use shorter prefix to not loose 'this' etc - KeywordCompletion.complete(expression ?: parameters.getPosition(), keywordsPrefix) { lookupElement -> + KeywordCompletion.complete(expression ?: parameters.getPosition(), keywordsPrefix, isJvmModule) { lookupElement -> val keyword = lookupElement.lookupString if (keyword in keywordsToSkip) return@complete 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 721ab94ce25..e842a14043a 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 @@ -53,14 +53,14 @@ object KeywordCompletion { private val KEYWORDS_TO_IGNORE_PREFIX = TokenSet.create(OVERRIDE_KEYWORD /* it's needed to complete overrides that should be work by member name too */) - public fun complete(position: PsiElement, prefix: String, consumer: (LookupElement) -> Unit) { + public fun complete(position: PsiElement, prefix: String, isJvmModule: Boolean, consumer: (LookupElement) -> Unit) { if (!GENERAL_FILTER.isAcceptable(position, position)) return val parserFilter = buildFilter(position) for (keywordToken in ALL_KEYWORDS) { var keyword = keywordToken.getValue() - if (keyword == COMPANION_KEYWORD.getValue()) { // complete "companion object" instead of simply "companion" unless we are before "object" already + if (keywordToken == COMPANION_KEYWORD) { // complete "companion object" instead of simply "companion" unless we are before "object" already fun PsiElement.isSpace() = this is PsiWhiteSpace && '\n' !in getText() var next = position.nextLeaf { !(it.isSpace() || it.getText() == "$") }?.getText() @@ -72,6 +72,8 @@ object KeywordCompletion { } } + if (keywordToken == DYNAMIC_KEYWORD && isJvmModule) continue // not supported for JVM + // we use simple matching by prefix, not prefix matcher from completion if (!keyword.startsWith(prefix) && keywordToken !in KEYWORDS_TO_IGNORE_PREFIX) continue diff --git a/idea/idea-completion/testData/basic/js/DynamicKeyword.kt b/idea/idea-completion/testData/basic/js/DynamicKeyword.kt new file mode 100644 index 00000000000..52730259396 --- /dev/null +++ b/idea/idea-completion/testData/basic/js/DynamicKeyword.kt @@ -0,0 +1,5 @@ +fun foo() { + val test: +} + +// EXIST: dynamic diff --git a/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt b/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt index 1d1e2c7fd92..65588a1800d 100644 --- a/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt +++ b/idea/idea-completion/testData/keywords/InFunctionTypePosition.kt @@ -4,5 +4,4 @@ fun foo() { /*TODO: Is 'package' type qualifier syntax correct?*/ // EXIST: package -// EXIST: dynamic // NOTHING_ELSE diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 0dddf4d0eee..0fd33c3fb4c 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -2260,6 +2260,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("DynamicKeyword.kt") + public void testDynamicKeyword() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/js/DynamicKeyword.kt"); + doTest(fileName); + } + @TestMetadata("InPackage.kt") public void testInPackage() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/js/InPackage.kt");