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