From 34aada75eb6b526f8b43e4ad622cc6b0464abfa5 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 17 Sep 2014 13:28:11 +0400 Subject: [PATCH] Fixed KT-5795 Do not suggest member extension functions with wrong implicit reciever #KT-5795 Fixed --- .../jetbrains/jet/plugin/codeInsight/TipsManager.java | 7 ++++++- .../basic/common/extensions/WrongImplicitReceiver.kt | 11 +++++++++++ .../completion/JSBasicCompletionTestGenerated.java | 11 +++++++---- .../completion/JvmBasicCompletionTestGenerated.java | 11 +++++++---- 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.java index 322788d35e5..33dcc443275 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/TipsManager.java @@ -101,7 +101,12 @@ public final class TipsManager { for (ReceiverParameterDescriptor receiverDescriptor : result) { JetType receiverType = receiverDescriptor.getType(); - descriptorsSet.addAll(receiverType.getMemberScope().getAllDescriptors()); + for (DeclarationDescriptor member : receiverType.getMemberScope().getAllDescriptors()) { + // skip member extension functions&properties + if (member instanceof CallableDescriptor && ((CallableDescriptor) member).getReceiverParameter() != null) continue; + + descriptorsSet.add(member); + } } descriptorsSet.addAll(resolutionScope.getAllDescriptors()); diff --git a/idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt b/idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt new file mode 100644 index 00000000000..93cdf6d4157 --- /dev/null +++ b/idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt @@ -0,0 +1,11 @@ +class X { + fun String.f() {} +} + +fun foo() { + with (X()) { + + } +} + +// ABSENT: f diff --git a/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JSBasicCompletionTestGenerated.java index d99b35f7405..8cea5fbc5c8 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; @@ -614,6 +611,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("WrongImplicitReceiver.kt") + public void testWrongImplicitReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt"); + doTest(fileName); + } + } @TestMetadata("idea/testData/completion/basic/common/namedParameters") diff --git a/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmBasicCompletionTestGenerated.java index 4b9f6f16785..247c6f35aaa 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; @@ -614,6 +611,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("WrongImplicitReceiver.kt") + public void testWrongImplicitReceiver() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/extensions/WrongImplicitReceiver.kt"); + doTest(fileName); + } + } @TestMetadata("idea/testData/completion/basic/common/namedParameters")