diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt index 16fb066e09c..7b40ca46199 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt @@ -32,6 +32,7 @@ import org.jetbrains.jet.plugin.util.makeNullable import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.renderer.DescriptorRenderer +import org.jetbrains.jet.lang.psi.psiUtil.getReceiverExpression class SmartCompletion(val expression: JetSimpleNameExpression, val resolveSession: ResolveSessionForBodies, @@ -79,16 +80,12 @@ class SmartCompletion(val expression: JetSimpleNameExpression, val asTypePositionResult = buildForAsTypePosition() if (asTypePositionResult != null) return asTypePositionResult - val parent = expression.getParent() - val expressionWithType: JetExpression - val receiver: JetExpression? - if (parent is JetQualifiedExpression) { - expressionWithType = parent - receiver = parent.getReceiverExpression() + val receiver = expression.getReceiverExpression() + val expressionWithType = if (receiver != null) { + expression.getParent() as? JetExpression ?: return null } else { - expressionWithType = expression - receiver = null + expression } val allExpectedInfos = calcExpectedInfos(expressionWithType) ?: return null diff --git a/idea/testData/completion/smart/InfixCall.kt b/idea/testData/completion/smart/InfixCall.kt new file mode 100644 index 00000000000..0aa7ce7973f --- /dev/null +++ b/idea/testData/completion/smart/InfixCall.kt @@ -0,0 +1,18 @@ +class X { + fun foo(i: Int) = "" + fun bar() = "" + val prop: String = "" +} + +fun X.ext1(s: String) = "" +fun X.ext2() = "" +fun X.extProp: String get() = "" + +val s: String = X() + +// EXIST: foo +// ABSENT: bar +// ABSENT: prop +// EXIST: ext1 +// ABSENT: ext2 +// ABSENT: extProp diff --git a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java index ca9965bd250..0c96d828289 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java @@ -17,13 +17,9 @@ package org.jetbrains.jet.completion; import com.intellij.testFramework.TestDataPath; -import junit.framework.Test; -import junit.framework.TestSuite; -import org.junit.runner.RunWith; import org.jetbrains.jet.JetTestUtils; -import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.JUnit3RunnerWithInners; +import org.junit.runner.RunWith; import java.io.File; import java.util.regex.Pattern; @@ -356,6 +352,12 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT doTest(fileName); } + @TestMetadata("InfixCall.kt") + public void testInfixCall() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InfixCall.kt"); + doTest(fileName); + } + @TestMetadata("InsideIdentifier.kt") public void testInsideIdentifier() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/InsideIdentifier.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java index 47658f502ce..e28bbbf0329 100644 --- a/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/MultiFileJvmBasicCompletionTestGenerated.java @@ -17,9 +17,13 @@ package org.jetbrains.jet.completion; import com.intellij.testFramework.TestDataPath; -import org.jetbrains.jet.JetTestUtils; -import org.jetbrains.jet.test.TestMetadata; +import junit.framework.Test; +import junit.framework.TestSuite; import org.junit.runner.RunWith; +import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; +import org.jetbrains.jet.test.TestMetadata; +import org.jetbrains.jet.JUnit3RunnerWithInners; import java.io.File; import java.util.regex.Pattern;