KT-31762: Fix completion in enum entries constructors

- The issue was caused by incorrect parsing of enum entry because of `$` in the `KotlinCompletionContributor::DEFAULT_DUMMY_IDENTIFIER`
  - Incorrect parsing caused arguments next to completed one to be recognized as another enum entries
- Change `KotlinCompletionContributor::isInClassHeader` to accept classes without bodies, so identifier without `$` is used inside enum entries constructors
- ^KT-31762 Fixed
This commit is contained in:
Roman Golyshev
2019-10-14 16:33:52 +03:00
committed by Roman Golyshev
parent 042100ea77
commit 3661dedacf
4 changed files with 18 additions and 2 deletions
@@ -170,9 +170,9 @@ class KotlinCompletionContributor : CompletionContributor() {
private fun isInClassHeader(tokenBefore: PsiElement?): Boolean {
val classOrObject = tokenBefore?.parents?.firstIsInstanceOrNull<KtClassOrObject>() ?: return false
val name = classOrObject.nameIdentifier ?: return false
val body = classOrObject.getBody() ?: return false
val headerEnd = classOrObject.body?.startOffset ?: classOrObject.endOffset
val offset = tokenBefore.startOffset
return name.endOffset <= offset && offset <= body.startOffset
return name.endOffset <= offset && offset <= headerEnd
}
private fun specialLambdaSignatureDummyIdentifier(tokenBefore: PsiElement?): String? {
+6
View File
@@ -0,0 +1,6 @@
enum class A { AAA }
enum class E(val one: A, val two: A) {
EE(A.<caret>, A.AAA)
}
// EXIST: AAA
@@ -440,6 +440,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
runTest("idea/idea-completion/testData/basic/common/KT13780_1.kt");
}
@TestMetadata("KT31762.kt")
public void testKT31762() throws Exception {
runTest("idea/idea-completion/testData/basic/common/KT31762.kt");
}
@TestMetadata("KT33903_1.kt")
public void testKT33903_1() throws Exception {
runTest("idea/idea-completion/testData/basic/common/KT33903_1.kt");
@@ -440,6 +440,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
runTest("idea/idea-completion/testData/basic/common/KT13780_1.kt");
}
@TestMetadata("KT31762.kt")
public void testKT31762() throws Exception {
runTest("idea/idea-completion/testData/basic/common/KT31762.kt");
}
@TestMetadata("KT33903_1.kt")
public void testKT33903_1() throws Exception {
runTest("idea/idea-completion/testData/basic/common/KT33903_1.kt");