From 3e2ad55c9e70bdefde87b7557d65182e3b9c2dac Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 8 Aug 2014 15:54:49 +0400 Subject: [PATCH] Code completion: changed dummy identifier for basic completion to ignore context ahead + no invisible symbols on first completion even if nothing matches --- .../jet/plugin/completion/JetCompletionContributor.kt | 9 ++++++--- .../jet/plugin/completion/NamedParametersCompletion.kt | 2 +- .../common/namedParameters/NotOnlyNamedParameters.kt | 2 +- .../common/namedParameters/NotOnlyNamedParameters2.kt | 9 +++++++++ .../basic/common/namedParameters/OnlyNamedParameters.kt | 1 + .../common/namedParameters/WithParameterExpression.kt | 4 ++-- .../basic/java/NoClassNameDuplicationForRuntimeClass.kt | 2 +- .../jet/completion/JSBasicCompletionTestGenerated.java | 5 +++++ .../jet/completion/JvmBasicCompletionTestGenerated.java | 5 +++++ 9 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.kt b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.kt index a624ef398b1..61ec68cab05 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.kt @@ -42,6 +42,8 @@ public class JetCompletionContributor : CompletionContributor() { private val EXTENSION_RECEIVER_TYPE_DUMMY_IDENTIFIER = "KotlinExtensionDummy.fake() {}" // A way to add reference into file at completion place private val EXTENSION_RECEIVER_TYPE_ACTIVATION_PATTERN = psiElement().afterLeaf(JetTokens.FUN_KEYWORD.toString(), JetTokens.VAL_KEYWORD.toString(), JetTokens.VAR_KEYWORD.toString()) + private val DEFAULT_DUMMY_IDENTIFIER = CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "$" // add '$' to ignore context after the caret + ;{ val provider = object : CompletionProvider() { override fun addCompletions(parameters: CompletionParameters, context: ProcessingContext, result: CompletionResultSet) { @@ -60,7 +62,7 @@ public class JetCompletionContributor : CompletionContributor() { val tokenBefore = psiFile.findElementAt(Math.max(0, offset - 1)) val dummyIdentifier = when { - context.getCompletionType() == CompletionType.SMART -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "$" // add '$' to ignore context after the caret + context.getCompletionType() == CompletionType.SMART -> DEFAULT_DUMMY_IDENTIFIER PackageDirectiveCompletion.ACTIVATION_PATTERN.accepts(tokenBefore) -> PackageDirectiveCompletion.DUMMY_IDENTIFIER @@ -68,7 +70,7 @@ public class JetCompletionContributor : CompletionContributor() { tokenBefore != null && isExtensionReceiverAfterDot(tokenBefore) -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "." - else -> CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + else -> DEFAULT_DUMMY_IDENTIFIER } context.setDummyIdentifier(dummyIdentifier) @@ -153,7 +155,8 @@ public class JetCompletionContributor : CompletionContributor() { val somethingAdded = BasicCompletionSession(configuration, parameters, result).complete() if (!somethingAdded && parameters.getInvocationCount() < 2) { // Rerun completion if nothing was found - val newConfiguration = CompletionSessionConfiguration(completeNonImportedDeclarations = true, completeNonAccessibleDeclarations = parameters.getInvocationCount() > 0) + val newConfiguration = CompletionSessionConfiguration(completeNonImportedDeclarations = true, + completeNonAccessibleDeclarations = false) BasicCompletionSession(newConfiguration, parameters, result).complete() } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt index bf799721350..b44234087a5 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt @@ -59,8 +59,8 @@ object NamedParametersCompletion { val callElement = PsiTreeUtil.getParentOfType(thisArgument, javaClass()) ?: return false for (argument in callElement.getValueArguments()) { - if (argument.isNamed()) return true if (argument == thisArgument) break + if (argument.isNamed()) return true } return false diff --git a/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt b/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt index 2a6bb3ea6b7..7fb4c496401 100644 --- a/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt +++ b/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt @@ -5,5 +5,5 @@ fun test(p: Int) = foo(12, , third = "") // EXIST: p // ABSENT: first -// ABSENT: third +// EXIST: third // EXIST: second diff --git a/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt b/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt new file mode 100644 index 00000000000..a5089cd1bad --- /dev/null +++ b/idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt @@ -0,0 +1,9 @@ +fun foo(first: Int, second: Int, third: String) { +} + +fun test(p: Int) = foo(second = 3) + +// EXIST: p +// EXIST: first +// EXIST: second +// EXIST: third diff --git a/idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt b/idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt index 4374c124ce9..a0f5378bbf6 100644 --- a/idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt +++ b/idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt @@ -7,3 +7,4 @@ fun test(p: Int) = foo(12, third = "", ) // ABSENT: first // ABSENT: third // EXIST: second +// NUMBER: 1 \ No newline at end of file diff --git a/idea/testData/completion/basic/common/namedParameters/WithParameterExpression.kt b/idea/testData/completion/basic/common/namedParameters/WithParameterExpression.kt index 7ea28caec37..dbe02b0f671 100644 --- a/idea/testData/completion/basic/common/namedParameters/WithParameterExpression.kt +++ b/idea/testData/completion/basic/common/namedParameters/WithParameterExpression.kt @@ -7,6 +7,6 @@ fun test() = small(paramFirst = 12) // EXIST: paramFirst // EXIST: paramSecond -// ABSENT: paramTest +// EXIST: paramTest -// NUMBER: 2 \ No newline at end of file +// NUMBER: 3 \ No newline at end of file diff --git a/idea/testData/completion/basic/java/NoClassNameDuplicationForRuntimeClass.kt b/idea/testData/completion/basic/java/NoClassNameDuplicationForRuntimeClass.kt index 356e94ee9f3..4b0ee96eb83 100644 --- a/idea/testData/completion/basic/java/NoClassNameDuplicationForRuntimeClass.kt +++ b/idea/testData/completion/basic/java/NoClassNameDuplicationForRuntimeClass.kt @@ -1,5 +1,5 @@ val x = LinesStream -// INVOCATION_COUNT: 1 +// INVOCATION_COUNT: 2 // EXIST: { lookupString:"LinesStream", tailText:" (kotlin.io)" } // NUMBER: 1 diff --git a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java index e807a6ec9cf..d5fe95fe459 100644 --- a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java @@ -565,6 +565,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt"); } + @TestMetadata("NotOnlyNamedParameters2.kt") + public void testNotOnlyNamedParameters2() throws Exception { + doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt"); + } + @TestMetadata("OnlyNamedParameters.kt") public void testOnlyNamedParameters() throws Exception { doTest("idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index d6a8f51593c..0c3adf5e2c3 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java @@ -565,6 +565,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters.kt"); } + @TestMetadata("NotOnlyNamedParameters2.kt") + public void testNotOnlyNamedParameters2() throws Exception { + doTest("idea/testData/completion/basic/common/namedParameters/NotOnlyNamedParameters2.kt"); + } + @TestMetadata("OnlyNamedParameters.kt") public void testOnlyNamedParameters() throws Exception { doTest("idea/testData/completion/basic/common/namedParameters/OnlyNamedParameters.kt");