From a015c44a60fe371943b6072bc3eed76d26f0b8b5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 20 Aug 2015 16:12:13 +0300 Subject: [PATCH] KT-8843 When typing in lambda parameters' names, smart completion kicks in and makes it impossible to type names #KT-8843 Fixed --- .../idea/completion/BasicCompletionSession.kt | 18 ++++++++---------- ...aParameter.kt => NotForLambdaParameter1.kt} | 0 .../NotForLambdaParameter2.kt | 9 +++++++++ .../NotForLambdaParameter3.kt | 9 +++++++++ .../test/JSBasicCompletionTestGenerated.java | 18 +++++++++++++++--- .../test/JvmBasicCompletionTestGenerated.java | 18 +++++++++++++++--- 6 files changed, 56 insertions(+), 16 deletions(-) rename idea/idea-completion/testData/basic/common/parameterNameAndType/{NotForLambdaParameter.kt => NotForLambdaParameter1.kt} (100%) create mode 100644 idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt create mode 100644 idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt 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 0208e6065cd..5f5323a5d31 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 @@ -145,17 +145,15 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration, } private fun shouldCompleteParameterNameAndType(): Boolean { - when (completionKind) { - CompletionKind.PARAMETER_NAME, CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME -> { - val parameter = position.getNonStrictParentOfType()!! - val list = parameter.getParent() as? JetParameterList ?: return false - val owner = list.getParent() - return owner !is JetCatchClause && - owner !is JetPropertyAccessor && - !((owner as? JetPrimaryConstructor)?.getContainingClassOrObject()?.isAnnotation() ?: false) - } + if (completionKind != CompletionKind.PARAMETER_NAME && completionKind != CompletionKind.ANNOTATION_TYPES_OR_PARAMETER_NAME) return false - else -> return false + val parameter = position.getNonStrictParentOfType()!! + val list = parameter.parent as? JetParameterList ?: return false + val owner = list.parent + return when (owner) { + is JetCatchClause, is JetPropertyAccessor, is JetFunctionLiteral -> false + is JetPrimaryConstructor -> !owner.getContainingClassOrObject().isAnnotation() + else -> true } } diff --git a/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt b/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter1.kt similarity index 100% rename from idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt rename to idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter1.kt diff --git a/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt b/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt new file mode 100644 index 00000000000..a64457b0089 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt @@ -0,0 +1,9 @@ +class AAA + +fun foo(p: (Int, String) -> Unit) { } + +fun bar() { + foo { a, b -> } +} + +// NUMBER: 0 diff --git a/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt b/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt new file mode 100644 index 00000000000..67fadf7b58e --- /dev/null +++ b/idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt @@ -0,0 +1,9 @@ +class BBB + +fun foo(p: (Int, String) -> Unit) { } + +fun bar() { + foo { a, b } +} + +// NUMBER: 0 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 bad4275b530..ca03737001c 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 @@ -1584,9 +1584,21 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } - @TestMetadata("NotForLambdaParameter.kt") - public void testNotForLambdaParameter() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt"); + @TestMetadata("NotForLambdaParameter1.kt") + public void testNotForLambdaParameter1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter1.kt"); + doTest(fileName); + } + + @TestMetadata("NotForLambdaParameter2.kt") + public void testNotForLambdaParameter2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt"); + doTest(fileName); + } + + @TestMetadata("NotForLambdaParameter3.kt") + public void testNotForLambdaParameter3() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt"); doTest(fileName); } diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index 8931abc5efe..849c5a8517a 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -1584,9 +1584,21 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } - @TestMetadata("NotForLambdaParameter.kt") - public void testNotForLambdaParameter() throws Exception { - String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter.kt"); + @TestMetadata("NotForLambdaParameter1.kt") + public void testNotForLambdaParameter1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter1.kt"); + doTest(fileName); + } + + @TestMetadata("NotForLambdaParameter2.kt") + public void testNotForLambdaParameter2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter2.kt"); + doTest(fileName); + } + + @TestMetadata("NotForLambdaParameter3.kt") + public void testNotForLambdaParameter3() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/parameterNameAndType/NotForLambdaParameter3.kt"); doTest(fileName); }