From b7e9d96af2718eaae511d8232c9060927c101137 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 14 Nov 2014 15:03:33 +0300 Subject: [PATCH] Smart completion includes constructor parameters for instantiation items --- .../smart/TypeInstantiationItems.kt | 20 +++++++++++-------- .../smart/ConstructorForJavaClass.kt | 2 +- .../smart/ConstructorWithParameters.kt | 5 +++++ .../JvmSmartCompletionTestGenerated.java | 6 ++++++ 4 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 idea/testData/completion/smart/ConstructorWithParameters.kt diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt index 297a2d15d7c..c5589f00c9e 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt @@ -99,14 +99,18 @@ class TypeInstantiationItems(val resolveSession: ResolveSessionForBodies, val bi } else { //TODO: when constructor has one parameter of lambda type with more than one parameter, generate special additional item - itemText += "()" - val baseInsertHandler = - (if (visibleConstructors.size == 0) - KotlinFunctionInsertHandler.NO_PARAMETERS_HANDLER - else if (visibleConstructors.size == 1) - KotlinLookupElementFactory.getDefaultInsertHandler(visibleConstructors.single()) - else - KotlinFunctionInsertHandler.WITH_PARAMETERS_HANDLER) as KotlinFunctionInsertHandler + itemText += when (visibleConstructors.size) { + 0 -> "()" + 1 -> DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderFunctionParameters(visibleConstructors.single()) + else -> "(...)" + } + + val baseInsertHandler = when (visibleConstructors.size) { + 0 -> KotlinFunctionInsertHandler.NO_PARAMETERS_HANDLER + 1 -> KotlinLookupElementFactory.getDefaultInsertHandler(visibleConstructors.single()) as KotlinFunctionInsertHandler + else -> KotlinFunctionInsertHandler.WITH_PARAMETERS_HANDLER + } + insertHandler = object : InsertHandler { override fun handleInsert(context: InsertionContext, item: LookupElement) { context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), typeText) diff --git a/idea/testData/completion/smart/ConstructorForJavaClass.kt b/idea/testData/completion/smart/ConstructorForJavaClass.kt index 1557ff8246f..3c356a4997d 100644 --- a/idea/testData/completion/smart/ConstructorForJavaClass.kt +++ b/idea/testData/completion/smart/ConstructorForJavaClass.kt @@ -2,4 +2,4 @@ import java.util.Date var a : Date = -// EXIST: { lookupString:"Date", itemText:"Date()" } +// EXIST: { lookupString:"Date", itemText:"Date(...)" } diff --git a/idea/testData/completion/smart/ConstructorWithParameters.kt b/idea/testData/completion/smart/ConstructorWithParameters.kt new file mode 100644 index 00000000000..de012299e99 --- /dev/null +++ b/idea/testData/completion/smart/ConstructorWithParameters.kt @@ -0,0 +1,5 @@ +class Foo(val p1: String, val p2: Any?) + +var a : Foo = + +// EXIST: { lookupString:"Foo", itemText:"Foo(p1: String, p2: Any?)" } diff --git a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java index d33cd3e378f..4d55dcc6726 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java @@ -186,6 +186,12 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT doTest(fileName); } + @TestMetadata("ConstructorWithParameters.kt") + public void testConstructorWithParameters() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/ConstructorWithParameters.kt"); + doTest(fileName); + } + @TestMetadata("EmptyPrefix.kt") public void testEmptyPrefix() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smart/EmptyPrefix.kt");