diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt index 767bb33835b..6928e1b3436 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.kt @@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingUtils import java.util.* import org.jetbrains.jet.lang.resolve.bindingContextUtil.getDataFlowInfo +import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension public object TipsManager{ @@ -60,7 +61,7 @@ public object TipsManager{ val dataFlowInfo = context.getDataFlowInfo(expression) for (variant in AutoCastUtils.getAutoCastVariants(receiverValue, context, dataFlowInfo)) { - variant.getMemberScope().getAllDescriptors().filterTo(descriptors, ::filterIfInfix) + variant.getMemberScope().getAllDescriptors().filterTo(descriptors) { filterIfInfix(it) && !it.isExtension } } JetScopeUtils.getAllExtensions(resolutionScope).filterTo(descriptors) { @@ -77,9 +78,7 @@ public object TipsManager{ val descriptorsSet = HashSet() for (receiverDescriptor in resolutionScope.getImplicitReceiversHierarchy()) { - receiverDescriptor.getType().getMemberScope().getAllDescriptors().filterTo(descriptorsSet) { - it !is CallableDescriptor || it.getReceiverParameter() == null/*skip member extension functions and properties*/ - } + receiverDescriptor.getType().getMemberScope().getAllDescriptors().filterTo(descriptorsSet) { !it.isExtension } } descriptorsSet.addAll(resolutionScope.getAllDescriptors()) diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt index c42faf41a45..6199fcd24dc 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.psi.JetExpression import org.jetbrains.jet.plugin.completion.ExpectedInfo import org.jetbrains.jet.plugin.util.makeNotNullable import org.jetbrains.jet.plugin.completion.qualifiedNameForSourceCode +import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension // adds java static members, enum members and members from class object class StaticMembers(val bindingContext: BindingContext, val resolveSession: ResolveSessionForBodies) { @@ -93,7 +94,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso val classObject = classDescriptor.getClassObjectDescriptor() if (classObject != null) { classObject.getDefaultType().getMemberScope().getAllDescriptors() - .filter { it !is CallableDescriptor || it.getReceiverParameter() == null } + .filter { !it.isExtension } .forEach(::processMember) } diff --git a/idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt b/idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt new file mode 100644 index 00000000000..9ec750b2964 --- /dev/null +++ b/idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt @@ -0,0 +1,10 @@ +class Foo { + fun Int.bar() = this +} + +fun main(args: Array) { + val v = Foo() + v. +} + +// ABSENT: bar \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java index df34109c65f..3b281959e8f 100644 --- a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java @@ -17,13 +17,10 @@ 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; @@ -620,6 +617,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("WrongExplicitReceiver.kt") + public void testWrongExplicitReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt"); + doTest(fileName); + } + @TestMetadata("WrongImplicitReceiver.kt") public void testWrongImplicitReceiver() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index 770e80fb3c9..72cf13d2f90 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java @@ -17,13 +17,10 @@ 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; @@ -620,6 +617,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("WrongExplicitReceiver.kt") + public void testWrongExplicitReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongExplicitReceiver.kt"); + doTest(fileName); + } + @TestMetadata("WrongImplicitReceiver.kt") public void testWrongImplicitReceiver() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt"); diff --git a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java index 0c96d828289..9ca56d99c51 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.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;