From 3cf7a44840b5c9a5d17f2bc618e46a7f48582337 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 14 Dec 2011 12:26:57 +0400 Subject: [PATCH] KT-825 Completion doesn't show overloaded functions --- .../handlers/JetFunctionInsertHandler.java | 4 ++++ .../references/JetSimpleNameReference.java | 4 +++- .../completion/basic/OverloadFunctions.kt | 24 +++++++++++++++++++ .../completion/handlers/SingleBrackets.kt | 17 +++++++++++++ .../handlers/SingleBrackets.kt.after | 17 +++++++++++++ .../jet/completion/JetCompletionTestBase.java | 16 +++++++++++++ .../handlers/FunctionsHandlerTest.java | 8 +++++++ 7 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 idea/testData/completion/basic/OverloadFunctions.kt create mode 100644 idea/testData/completion/handlers/SingleBrackets.kt create mode 100644 idea/testData/completion/handlers/SingleBrackets.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java index 68aafbc70a1..8a35b107592 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetFunctionInsertHandler.java @@ -22,6 +22,10 @@ public class JetFunctionInsertHandler implements InsertHandler { @Override public void handleInsert(InsertionContext context, LookupElement item) { + if (context.getCompletionChar() == '(') { + context.setAddCompletionChar(false); + } + int startOffset = context.getStartOffset(); int lookupStringLength = item.getLookupString().length(); int endOffset = startOffset + lookupStringLength; diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java index 03fe53b1c8b..bb955817b2c 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java @@ -148,7 +148,7 @@ class JetSimpleNameReference extends JetPsiReference { List result = Lists.newArrayList(); for (final DeclarationDescriptor descriptor : descriptors) { - LookupElementBuilder element = LookupElementBuilder.create(descriptor.getName()); + LookupElementBuilder element = LookupElementBuilder.create(descriptor, descriptor.getName()); String typeText = ""; String tailText = ""; boolean tailTextGrayed = false; @@ -165,6 +165,7 @@ class JetSimpleNameReference extends JetPsiReference { DescriptorRenderer.TEXT.renderType(valueParameterDescriptor.getOutType()); } }, ",") + ")"; + // TODO: A special case when it's impossible to resolve type parameters from arguments. Need '<' caret '>' // TODO: Support omitting brackets for one argument functions @@ -185,6 +186,7 @@ class JetSimpleNameReference extends JetPsiReference { else { typeText = DescriptorRenderer.TEXT.render(descriptor); } + element = element.setTailText(tailText, tailTextGrayed).setTypeText(typeText); PsiElement declaration = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor.getOriginal()); diff --git a/idea/testData/completion/basic/OverloadFunctions.kt b/idea/testData/completion/basic/OverloadFunctions.kt new file mode 100644 index 00000000000..757a0c0f8ce --- /dev/null +++ b/idea/testData/completion/basic/OverloadFunctions.kt @@ -0,0 +1,24 @@ +namespace Test.MyTest + +class A { + class object { + public fun testOther() { + + } + + public fun testOther(a: Boolean) { + + } + + public fun testOther(a: Int) { + + } + } +} + +fun testMy() { + A.test +} + +// EXIST: testOther +// NUMBER: 3 \ No newline at end of file diff --git a/idea/testData/completion/handlers/SingleBrackets.kt b/idea/testData/completion/handlers/SingleBrackets.kt new file mode 100644 index 00000000000..1593bc01db3 --- /dev/null +++ b/idea/testData/completion/handlers/SingleBrackets.kt @@ -0,0 +1,17 @@ +namespace Test.MyTest + +class A { + class object { + public fun testOther(a: Boolean) { + + } + + public fun testOther(a: Int) { + + } + } +} + +fun testMy() { + A.testOther +} \ No newline at end of file diff --git a/idea/testData/completion/handlers/SingleBrackets.kt.after b/idea/testData/completion/handlers/SingleBrackets.kt.after new file mode 100644 index 00000000000..94e927574b8 --- /dev/null +++ b/idea/testData/completion/handlers/SingleBrackets.kt.after @@ -0,0 +1,17 @@ +namespace Test.MyTest + +class A { + class object { + public fun testOther(a: Boolean) { + + } + + public fun testOther(a: Int) { + + } + } +} + +fun testMy() { + A.testOther() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java b/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java index 624eb685c3e..7e5a32a28f5 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java +++ b/idea/tests/org/jetbrains/jet/completion/JetCompletionTestBase.java @@ -8,6 +8,7 @@ import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.openapi.projectRoots.Sdk; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.plugin.PluginTestCaseBase; import java.io.BufferedReader; @@ -59,6 +60,11 @@ public abstract class JetCompletionTestBase extends LightCompletionTestCase { assertContainsItems(itemsShouldExist(getFile().getText())); assertNotContainItems(itemsShouldAbsent(getFile().getText())); + + Integer itemsNumber = getExpectedNumber(getFile().getText()); + if (itemsNumber != null) { + assertEquals(itemsNumber.intValue(), myItems.length); + } } @Override @@ -85,6 +91,16 @@ public abstract class JetCompletionTestBase extends LightCompletionTestCase { return findListWithPrefix("// ABSENT:", fileText); } + @Nullable + private static Integer getExpectedNumber(String fileText) { + final String[] numberStrings = findListWithPrefix("// NUMBER:", fileText); + if (numberStrings.length > 0) { + return Integer.parseInt(numberStrings[0]); + } + + return null; + } + @NotNull private static String[] findListWithPrefix(String prefix, String fileText) { ArrayList result = new ArrayList(); diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/FunctionsHandlerTest.java b/idea/tests/org/jetbrains/jet/completion/handlers/FunctionsHandlerTest.java index f265bde4714..ad0ed374b78 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/FunctionsHandlerTest.java +++ b/idea/tests/org/jetbrains/jet/completion/handlers/FunctionsHandlerTest.java @@ -20,6 +20,14 @@ public class FunctionsHandlerTest extends LightCompletionTestCase { checkResultByFile("ParamsFunction.kt.after"); } + public void testSingleBrackets() { + configureByFile("SingleBrackets.kt"); + type('('); + checkResultByFile("SingleBrackets.kt.after"); + } + + // public void + @Override protected String getTestDataPath() { return new File(PluginTestCaseBase.getTestDataPathBase(), "/completion/handlers/").getPath() +