diff --git a/annotations/com/intellij/codeInsight/completion/annotations.xml b/annotations/com/intellij/codeInsight/completion/annotations.xml
index fc886fda0c3..1e74e946e0c 100644
--- a/annotations/com/intellij/codeInsight/completion/annotations.xml
+++ b/annotations/com/intellij/codeInsight/completion/annotations.xml
@@ -15,7 +15,17 @@
name='com.intellij.codeInsight.completion.InsertHandler void handleInsert(com.intellij.codeInsight.completion.InsertionContext, T) 1'>
+ -
+
+
-
+ -
+
+
+ -
+
+
\ No newline at end of file
diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java
index 10fcca395f0..a9bdd23920e 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java
+++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java
@@ -20,19 +20,20 @@ import com.intellij.codeInsight.completion.*;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
-import com.intellij.psi.tree.IElementType;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import org.jetbrains.jet.JetNodeTypes;
-import org.jetbrains.jet.lang.psi.*;
+import org.jetbrains.jet.lang.psi.JetBlockExpression;
+import org.jetbrains.jet.lang.psi.JetCallExpression;
+import org.jetbrains.jet.lang.psi.JetExpression;
+import org.jetbrains.jet.lang.psi.JetFile;
+import org.jetbrains.jet.plugin.completion.smart.SmartCompletion;
import org.jetbrains.jet.plugin.references.JetSimpleNameReference;
public class JetCompletionContributor extends CompletionContributor {
public JetCompletionContributor() {
- final CompletionProvider provider = new CompletionProvider() {
+ CompletionProvider provider = new CompletionProvider() {
@Override
protected void addCompletions(
@NotNull CompletionParameters parameters,
@@ -125,7 +126,7 @@ public class JetCompletionContributor extends CompletionContributor {
PsiElement tokenAt = context.getFile().findElementAt(Math.max(0, offset));
if (tokenAt != null) {
PsiElement parent = tokenAt.getParent();
- if (parent instanceof JetExpression) {
+ if (parent instanceof JetExpression && !(parent instanceof JetBlockExpression)) {
// search expression to be replaced - go up while we are the first child of parent expression
JetExpression expression = (JetExpression) parent;
parent = expression.getParent();
@@ -133,7 +134,16 @@ public class JetCompletionContributor extends CompletionContributor {
expression = (JetExpression) parent;
parent = expression.getParent();
}
- context.setReplacementOffset(expression.getTextRange().getEndOffset());
+
+ int expressionEnd = expression.getTextRange().getEndOffset();
+ if (expression instanceof JetCallExpression) {
+ JetExpression calleeExpression = ((JetCallExpression) expression).getCalleeExpression();
+ context.setReplacementOffset(calleeExpression != null ? calleeExpression.getTextRange().getEndOffset() : expressionEnd);
+ }
+ else{
+ context.setReplacementOffset(expressionEnd);
+ }
+ context.getOffsetMap().addOffset(SmartCompletion.OLD_ARGUMENTS_REPLACEMENT_OFFSET, expressionEnd);
}
}
}
diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/WithTailInsertHandlers.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/WithTailInsertHandlers.kt
index d2ef1ae715e..ea3708b4706 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/WithTailInsertHandlers.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/WithTailInsertHandlers.kt
@@ -18,43 +18,27 @@ package org.jetbrains.jet.plugin.completion.handlers
import com.intellij.codeInsight.completion.*
import com.intellij.codeInsight.lookup.LookupElement
-import com.intellij.openapi.editor.event.*
import com.intellij.psi.PsiDocumentManager
import com.intellij.codeInsight.AutoPopupController
+import com.intellij.codeInsight.lookup.Lookup
+import org.jetbrains.jet.plugin.completion.smart.SmartCompletion
+import org.jetbrains.jet.plugin.completion.smart.KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY
abstract class WithTailInsertHandlerBase : InsertHandler {
protected abstract fun insertTail(context: InsertionContext, offset: Int, moveCaret: Boolean)
override fun handleInsert(context: InsertionContext, item: LookupElement) {
val document = context.getDocument()
- val caretModel = context.getEditor().getCaretModel()
- var maxChangeOffset = caretModel.getOffset()
- val documentListener = object: DocumentListener {
- override fun documentChanged(event: DocumentEvent) {
- val oldEndOffset = event.getOffset() + event.getOldLength()
- if (oldEndOffset < maxChangeOffset) {
- maxChangeOffset += event.getNewLength() - event.getOldLength()
- }
- else {
- maxChangeOffset = event.getOffset() + event.getNewLength()
- }
- }
+ item.handleInsert(context)
+ PsiDocumentManager.getInstance(context.getProject()).doPostponedOperationsAndUnblockDocument(document)
- override fun beforeDocumentChange(event: DocumentEvent) {
- }
+ var tailOffset = context.getTailOffset()
+ if (context.getCompletionChar() == Lookup.REPLACE_SELECT_CHAR && item.getUserData(KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY) != null) {
+ val offset = context.getOffsetMap().getOffset(SmartCompletion.OLD_ARGUMENTS_REPLACEMENT_OFFSET)
+ if (offset != -1) tailOffset = offset
}
-
- document.addDocumentListener(documentListener)
- try{
- item.handleInsert(context)
- PsiDocumentManager.getInstance(context.getProject()).doPostponedOperationsAndUnblockDocument(document)
- }
- finally {
- document.removeDocumentListener(documentListener)
- }
-
- insertTail(context, maxChangeOffset, caretModel.getOffset() == maxChangeOffset)
+ insertTail(context, tailOffset, context.getEditor().getCaretModel().getOffset() == tailOffset)
}
}
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 a6ca4e28072..3cba6f40903 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt
@@ -37,6 +37,28 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
private val project = expression.getProject()
public fun buildLookupElements(referenceVariants: Iterable): Collection? {
+ return buildLookupElementsInternal(referenceVariants)?.map {
+ if (it.getUserData(KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY) == null) {
+ object : LookupElementDecorator(it) {
+ override fun handleInsert(context: InsertionContext) {
+ if (context.getCompletionChar() == Lookup.REPLACE_SELECT_CHAR) {
+ val offset = context.getOffsetMap().getOffset(SmartCompletion.OLD_ARGUMENTS_REPLACEMENT_OFFSET)
+ if (offset != -1) {
+ context.getDocument().deleteString(context.getTailOffset(), offset)
+ }
+ }
+
+ super.handleInsert(context)
+ }
+ }
+ }
+ else {
+ it
+ }
+ }
+ }
+
+ private fun buildLookupElementsInternal(referenceVariants: Iterable): Collection? {
val parent = expression.getParent()
val expressionWithType: JetExpression
val receiver: JetExpression?
@@ -73,7 +95,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
else -> ExpectedInfoClassification.NOT_MATCHES
}
}
- result.addLookupElements(expectedInfos, classifier, { DescriptorLookupConverter.createLookupElement(resolveSession, bindingContext, descriptor) })
+ result.addLookupElements(expectedInfos, classifier, { createLookupElement(descriptor, resolveSession, bindingContext) })
if (receiver == null) {
toFunctionReferenceLookupElement(descriptor, functionExpectedInfos)?.let { result.add(it) }
@@ -129,7 +151,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
val matchedExpectedInfos = functionExpectedInfos.filter { functionType.isSubtypeOf(it.`type`) }
if (matchedExpectedInfos.isEmpty()) return null
- var lookupElement = DescriptorLookupConverter.createLookupElement(resolveSession, bindingContext, descriptor)
+ var lookupElement = createLookupElement(descriptor, resolveSession, bindingContext)
val text = "::" + (if (descriptor is ConstructorDescriptor) descriptor.getContainingDeclaration().getName() else descriptor.getName())
lookupElement = object: LookupElementDecorator(lookupElement) {
override fun getLookupString() = text
@@ -160,4 +182,8 @@ class SmartCompletion(val expression: JetSimpleNameExpression,
return null
}
+
+ class object {
+ public val OLD_ARGUMENTS_REPLACEMENT_OFFSET: OffsetKey = OffsetKey.create("nonFunctionReplacementOffset")
+ }
}
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 86eebb21d42..7e44b3672ec 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt
@@ -104,7 +104,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso
}
private fun createLookupElement(memberDescriptor: DeclarationDescriptor, classDescriptor: ClassDescriptor): LookupElement {
- val lookupElement = DescriptorLookupConverter.createLookupElement(resolveSession, bindingContext, memberDescriptor)
+ val lookupElement = createLookupElement(memberDescriptor, resolveSession, bindingContext)
val qualifierPresentation = classDescriptor.getName().asString()
val lookupString = qualifierPresentation + "." + lookupElement.getLookupString()
val qualifierText = DescriptorUtils.getFqName(classDescriptor).asString() //TODO: escape keywords
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 f3264bb475d..4fbbaf2a7c1 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt
@@ -21,14 +21,12 @@ import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.types.TypeUtils
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
import org.jetbrains.jet.lang.descriptors.ClassDescriptor
-import org.jetbrains.jet.plugin.completion.DescriptorLookupConverter
import org.jetbrains.jet.renderer.DescriptorRenderer
import com.intellij.codeInsight.completion.InsertHandler
import org.jetbrains.jet.lang.resolve.DescriptorUtils
import org.jetbrains.jet.lang.descriptors.Modality
import org.jetbrains.jet.lang.descriptors.ClassKind
import org.jetbrains.jet.plugin.codeInsight.ImplementMethodsHandler
-import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor
import com.intellij.codeInsight.lookup.LookupElementDecorator
import com.intellij.codeInsight.lookup.LookupElementPresentation
import com.intellij.codeInsight.completion.InsertionContext
@@ -36,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext
import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
import org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHandler
import org.jetbrains.jet.plugin.completion.*
+import org.jetbrains.jet.plugin.completion.handlers.CaretPosition
class TypeInstantiationItems(val bindingContext: BindingContext, val resolveSession: ResolveSessionForBodies) {
public fun addToCollection(collection: MutableCollection, expectedInfos: Collection) {
@@ -53,7 +52,7 @@ class TypeInstantiationItems(val bindingContext: BindingContext, val resolveSess
if (!(classifier is ClassDescriptor)) return
//TODO: check for constructor's visibility
- var lookupElement = DescriptorLookupConverter.createLookupElement(resolveSession, bindingContext, classifier)
+ var lookupElement = createLookupElement(classifier, resolveSession, bindingContext)
var lookupString = lookupElement.getLookupString()
@@ -85,12 +84,12 @@ class TypeInstantiationItems(val bindingContext: BindingContext, val resolveSess
itemText += "()"
val constructors = classifier.getConstructors()
val baseInsertHandler =
- if (constructors.size == 0)
+ (if (constructors.size == 0)
JetFunctionInsertHandler.NO_PARAMETERS_HANDLER
else if (constructors.size == 1)
DescriptorLookupConverter.getDefaultInsertHandler(constructors.first())!!
else
- JetFunctionInsertHandler.WITH_PARAMETERS_HANDLER
+ JetFunctionInsertHandler.WITH_PARAMETERS_HANDLER) as JetFunctionInsertHandler
insertHandler = object : InsertHandler {
override fun handleInsert(context: InsertionContext, item: LookupElement) {
context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), typeText)
@@ -101,7 +100,10 @@ class TypeInstantiationItems(val bindingContext: BindingContext, val resolveSess
shortenReferences(context, context.getStartOffset(), context.getTailOffset())
}
}
- if ((baseInsertHandler as JetFunctionInsertHandler).lambdaInfo != null) {
+ if (baseInsertHandler.caretPosition == CaretPosition.IN_BRACKETS) {
+ lookupElement = lookupElement.keepOldArgumentListOnTab()
+ }
+ if (baseInsertHandler.lambdaInfo != null) {
lookupElement.putUserData(JetCompletionCharFilter.ACCEPT_OPENING_BRACE, true)
}
}
diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt
index cce7166c8d1..7f2303b465d 100644
--- a/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt
+++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/Utils.kt
@@ -31,9 +31,13 @@ import org.jetbrains.jet.lang.types.JetType
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns
import org.jetbrains.jet.lang.types.checker.JetTypeChecker
import com.intellij.codeInsight.lookup.LookupElementPresentation
-import org.jetbrains.jet.plugin.completion.handlers.WithTailStringInsertHandler
import java.util.ArrayList
import org.jetbrains.jet.plugin.completion.*
+import com.intellij.openapi.util.Key
+import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
+import org.jetbrains.jet.plugin.project.ResolveSessionForBodies
+import org.jetbrains.jet.lang.resolve.BindingContext
+import org.jetbrains.jet.plugin.completion.handlers.WithTailStringInsertHandler
class ArtificialElementInsertHandler(
val textBeforeCaret: String, val textAfterCaret: String, val shortenRefs: Boolean) : InsertHandler{
@@ -83,6 +87,13 @@ fun LookupElement.addTail(matchedExpectedInfos: Collection): Looku
fun LookupElement.suppressAutoInsertion() = AutoCompletionPolicy.NEVER_AUTOCOMPLETE.applyPolicy(this)
+val KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY = Key("KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY")
+
+fun LookupElement.keepOldArgumentListOnTab(): LookupElement {
+ putUserData(KEEP_OLD_ARGUMENT_LIST_ON_TAB_KEY, Unit.VALUE)
+ return this
+}
+
enum class ExpectedInfoClassification {
MATCHES
MAKE_NOT_NULLABLE
@@ -151,6 +162,11 @@ fun functionType(function: FunctionDescriptor): JetType? {
function.getReturnType() ?: return null)
}
+fun createLookupElement(descriptor: DeclarationDescriptor, resolveSession: ResolveSessionForBodies, bindingContext: BindingContext): LookupElement {
+ val element = DescriptorLookupConverter.createLookupElement(resolveSession, bindingContext, descriptor)
+ return if (descriptor is FunctionDescriptor && descriptor.getValueParameters().isNotEmpty()) element.keepOldArgumentListOnTab() else element
+}
+
fun JetType.isSubtypeOf(expectedType: JetType) = !isError() && JetTypeChecker.INSTANCE.isSubtypeOf(this, expectedType)
fun T?.toList(): List = if (this != null) listOf(this) else listOf()
diff --git a/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt b/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt
new file mode 100644
index 00000000000..5a0f8519533
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt
@@ -0,0 +1,8 @@
+package sample
+
+fun foo(s: String){
+ val s1: String =
+}
+
+//ELEMENT: s
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt.after b/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt.after
new file mode 100644
index 00000000000..64540087215
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt.after
@@ -0,0 +1,8 @@
+package sample
+
+fun foo(s: String){
+ val s1: String = s
+}
+
+//ELEMENT: s
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt b/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt
new file mode 100644
index 00000000000..49fc06d2763
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt
@@ -0,0 +1,7 @@
+fun foo(p: Int): Int = p
+
+fun f(p: Int): Int {
+ return foo(1)
+}
+
+//ELEMENT: p
diff --git a/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt.after b/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt.after
new file mode 100644
index 00000000000..38eea0f3b25
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt.after
@@ -0,0 +1,7 @@
+fun foo(p: Int): Int = p
+
+fun f(p: Int): Int {
+ return pfoo(1)
+}
+
+//ELEMENT: p
diff --git a/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt b/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt
new file mode 100644
index 00000000000..74121ac37c5
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt
@@ -0,0 +1,10 @@
+fun foo(s: String, c: Char){ }
+
+fun takeString(p: Int): String? = null
+
+fun bar() {
+ foo(qqq(1, 2, 3))
+}
+
+// ELEMENT_TEXT: "!! takeString"
+// CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt.after b/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt.after
new file mode 100644
index 00000000000..bde01ae580c
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt.after
@@ -0,0 +1,10 @@
+fun foo(s: String, c: Char){ }
+
+fun takeString(p: Int): String? = null
+
+fun bar() {
+ foo(takeString(1, 2, 3)!!, )
+}
+
+// ELEMENT_TEXT: "!! takeString"
+// CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt b/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt
new file mode 100644
index 00000000000..8b5be9faf20
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt
@@ -0,0 +1,8 @@
+fun foo(s: String){ }
+
+fun bar(sss: String) {
+ foo(x())
+}
+
+//ELEMENT: sss
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt.after b/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt.after
new file mode 100644
index 00000000000..86699894ac5
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceExpression4.kt.after
@@ -0,0 +1,8 @@
+fun foo(s: String){ }
+
+fun bar(sss: String) {
+ foo(sss)
+}
+
+//ELEMENT: sss
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt b/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt
new file mode 100644
index 00000000000..732276dcbdb
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt
@@ -0,0 +1,9 @@
+fun foo(p: Int): Int = p
+fun bar(p: Int): Int = p
+
+fun f(): Int {
+ return foo(1)
+}
+
+//ELEMENT: bar
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt.after b/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt.after
new file mode 100644
index 00000000000..26ca3bc73d0
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt.after
@@ -0,0 +1,9 @@
+fun foo(p: Int): Int = p
+fun bar(p: Int): Int = p
+
+fun f(): Int {
+ return bar(1)
+}
+
+//ELEMENT: bar
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt b/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt
new file mode 100644
index 00000000000..0994f02fc98
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt
@@ -0,0 +1,9 @@
+fun foo(p: Int): Int = p
+fun bar(): Int = p
+
+fun f(): Int {
+ return foo(1)
+}
+
+//ELEMENT: bar
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt.after b/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt.after
new file mode 100644
index 00000000000..2f5ee25598e
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt.after
@@ -0,0 +1,9 @@
+fun foo(p: Int): Int = p
+fun bar(): Int = p
+
+fun f(): Int {
+ return bar()
+}
+
+//ELEMENT: bar
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt b/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt
new file mode 100644
index 00000000000..3c68aa0e6df
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt
@@ -0,0 +1,10 @@
+fun foo(s: String, i: Int){ }
+
+fun takeString(p: Int): String = ""
+
+fun bar() {
+ foo(x(1))
+}
+
+//ELEMENT: takeString
+//CHAR: \t
diff --git a/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt.after b/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt.after
new file mode 100644
index 00000000000..dbc55ee61d8
--- /dev/null
+++ b/idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt.after
@@ -0,0 +1,10 @@
+fun foo(s: String, i: Int){ }
+
+fun takeString(p: Int): String = ""
+
+fun bar() {
+ foo(takeString(1), )
+}
+
+//ELEMENT: takeString
+//CHAR: \t
diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java
index 33c46a63964..9ad93b3b333 100644
--- a/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java
@@ -176,6 +176,16 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
doTest("idea/testData/completion/handlers/smart/ConstructorWithParameters.kt");
}
+ @TestMetadata("DoNotEraseBraceOnTab.kt")
+ public void testDoNotEraseBraceOnTab() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/DoNotEraseBraceOnTab.kt");
+ }
+
+ @TestMetadata("DoNotReplaceOnEnter.kt")
+ public void testDoNotReplaceOnEnter() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/DoNotReplaceOnEnter.kt");
+ }
+
@TestMetadata("EnumMember.kt")
public void testEnumMember() throws Exception {
doTest("idea/testData/completion/handlers/smart/EnumMember.kt");
@@ -286,6 +296,11 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
doTest("idea/testData/completion/handlers/smart/NullableValue3.kt");
}
+ @TestMetadata("NullableValueKeepOldArguments.kt")
+ public void testNullableValueKeepOldArguments() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/NullableValueKeepOldArguments.kt");
+ }
+
@TestMetadata("TabReplaceComma1.kt")
public void testTabReplaceComma1() throws Exception {
doTest("idea/testData/completion/handlers/smart/TabReplaceComma1.kt");
@@ -311,6 +326,26 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
doTest("idea/testData/completion/handlers/smart/TabReplaceExpression3.kt");
}
+ @TestMetadata("TabReplaceExpression4.kt")
+ public void testTabReplaceExpression4() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/TabReplaceExpression4.kt");
+ }
+
+ @TestMetadata("TabReplaceFunctionName1.kt")
+ public void testTabReplaceFunctionName1() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/TabReplaceFunctionName1.kt");
+ }
+
+ @TestMetadata("TabReplaceFunctionName2.kt")
+ public void testTabReplaceFunctionName2() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/TabReplaceFunctionName2.kt");
+ }
+
+ @TestMetadata("TabReplaceFunctionName3.kt")
+ public void testTabReplaceFunctionName3() throws Exception {
+ doTest("idea/testData/completion/handlers/smart/TabReplaceFunctionName3.kt");
+ }
+
@TestMetadata("TabReplaceIdentifier.kt")
public void testTabReplaceIdentifier() throws Exception {
doTest("idea/testData/completion/handlers/smart/TabReplaceIdentifier.kt");