From d28705a5ec700c70f09e39bf58a2e1f628d457c5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 19 Dec 2013 15:58:38 +0400 Subject: [PATCH] Smart completion to ignore context after the caret --- .idea/dictionaries/valentin.xml | 7 ++++++ .../completion/JetCompletionContributor.java | 23 +++++++++++-------- .../BeforeArgumentWithBinaryOperation.kt | 8 +++++++ .../BeforeArgumentWithBinaryOperation2.kt | 10 ++++++++ .../BeforeArgumentWithBinaryOperation3.kt | 8 +++++++ .../JetSmartCompletionTestGenerated.java | 15 ++++++++++++ 6 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 .idea/dictionaries/valentin.xml create mode 100644 idea/testData/completion/smart/BeforeArgumentWithBinaryOperation.kt create mode 100644 idea/testData/completion/smart/BeforeArgumentWithBinaryOperation2.kt create mode 100644 idea/testData/completion/smart/BeforeArgumentWithBinaryOperation3.kt diff --git a/.idea/dictionaries/valentin.xml b/.idea/dictionaries/valentin.xml new file mode 100644 index 00000000000..916bc6632c0 --- /dev/null +++ b/.idea/dictionaries/valentin.xml @@ -0,0 +1,7 @@ + + + + pparent + + + \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java index e619a654d0a..6fea27158f9 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java @@ -101,17 +101,20 @@ public class JetCompletionContributor extends CompletionContributor { public void beforeCompletion(@NotNull CompletionInitializationContext context) { if (context.getFile() instanceof JetFile) { int offset = context.getStartOffset(); - - PsiElement position = context.getFile().findElementAt(Math.max(0, offset - 1)); - - if (JetPackagesContributor.ACTIVATION_PATTERN.accepts(position)) { - context.setDummyIdentifier(JetPackagesContributor.DUMMY_IDENTIFIER); + PsiElement tokenBefore = context.getFile().findElementAt(Math.max(0, offset - 1)); + if (context.getCompletionType() == CompletionType.SMART) { + context.setDummyIdentifier(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + "$"); // add '$' to ignore context after the caret } - else if (JetExtensionReceiverTypeContributor.ACTIVATION_PATTERN.accepts(position)) { - context.setDummyIdentifier(JetExtensionReceiverTypeContributor.DUMMY_IDENTIFIER); - } - else{ - context.setDummyIdentifier(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED); + else { + if (JetPackagesContributor.ACTIVATION_PATTERN.accepts(tokenBefore)) { + context.setDummyIdentifier(JetPackagesContributor.DUMMY_IDENTIFIER); + } + else if (JetExtensionReceiverTypeContributor.ACTIVATION_PATTERN.accepts(tokenBefore)) { + context.setDummyIdentifier(JetExtensionReceiverTypeContributor.DUMMY_IDENTIFIER); + } + else{ + context.setDummyIdentifier(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED); + } } if (!context.getEditor().getSelectionModel().hasSelection()) { diff --git a/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation.kt b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation.kt new file mode 100644 index 00000000000..f3cf5fa21f8 --- /dev/null +++ b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation.kt @@ -0,0 +1,8 @@ +fun foo(s: String){ } + +fun bar(p1: String, p2: Int) { + foo(1 + 2) +} + +// EXIST: p1 +// ABSENT: p2 diff --git a/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation2.kt b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation2.kt new file mode 100644 index 00000000000..261605aa6e1 --- /dev/null +++ b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation2.kt @@ -0,0 +1,10 @@ +val v1: Int = 10 +val v2: String = "" + +fun foo(i: Int){} + +var call: A = foo(3 + 2) + set(value) { } + +// EXIST: v1 +// ABSENT: v2 diff --git a/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation3.kt b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation3.kt new file mode 100644 index 00000000000..b2805951952 --- /dev/null +++ b/idea/testData/completion/smart/BeforeArgumentWithBinaryOperation3.kt @@ -0,0 +1,8 @@ +fun foo(s: String){ } + +fun bar(p1: String, p2: Int) { + foo(x + 2) +} + +// EXIST: p1 +// ABSENT: p2 diff --git a/idea/tests/org/jetbrains/jet/completion/JetSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JetSmartCompletionTestGenerated.java index 8c4af0f11da..dd4dfaf0ec9 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JetSmartCompletionTestGenerated.java @@ -56,6 +56,21 @@ public class JetSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT doTest("idea/testData/completion/smart/AutoNotNullTypeWithQualifier.kt"); } + @TestMetadata("BeforeArgumentWithBinaryOperation.kt") + public void testBeforeArgumentWithBinaryOperation() throws Exception { + doTest("idea/testData/completion/smart/BeforeArgumentWithBinaryOperation.kt"); + } + + @TestMetadata("BeforeArgumentWithBinaryOperation2.kt") + public void testBeforeArgumentWithBinaryOperation2() throws Exception { + doTest("idea/testData/completion/smart/BeforeArgumentWithBinaryOperation2.kt"); + } + + @TestMetadata("BeforeArgumentWithBinaryOperation3.kt") + public void testBeforeArgumentWithBinaryOperation3() throws Exception { + doTest("idea/testData/completion/smart/BeforeArgumentWithBinaryOperation3.kt"); + } + @TestMetadata("ChainedCall.kt") public void testChainedCall() throws Exception { doTest("idea/testData/completion/smart/ChainedCall.kt");