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");