diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinFunctionInsertHandler.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinFunctionInsertHandler.kt index a6d6d66c3f6..6a990945a6c 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinFunctionInsertHandler.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/handlers/KotlinFunctionInsertHandler.kt @@ -42,7 +42,7 @@ enum class CaretPosition { data class GenerateLambdaInfo(val lambdaType: JetType, val explicitParameters: Boolean) -class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val lambdaInfo: GenerateLambdaInfo?) : KotlinCallableInsertHandler() { +class KotlinFunctionInsertHandler(val caretPosition: CaretPosition, val lambdaInfo: GenerateLambdaInfo?) : KotlinCallableInsertHandler() { init { if (caretPosition == CaretPosition.AFTER_BRACKETS && lambdaInfo != null) { throw IllegalArgumentException("CaretPosition.AFTER_BRACKETS with lambdaInfo != null combination is not supported") @@ -92,11 +92,10 @@ class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val lambdaI val document = context.getDocument() val chars = document.getCharsSequence() - val forceParenthesis = lambdaInfo != null && completionChar == '\t' && chars.charAt(offset) == '(' - val braces = lambdaInfo != null && completionChar != '(' && !forceParenthesis + val insertLambda = lambdaInfo != null && completionChar != '(' && !(completionChar == '\t' && chars.charAt(offset) == '(') - val openingBracket = if (braces) '{' else '(' - val closingBracket = if (braces) '}' else ')' + val openingBracket = if (insertLambda) '{' else '(' + val closingBracket = if (insertLambda) '}' else ')' if (completionChar == Lookup.REPLACE_SELECT_CHAR) { val offset1 = chars.skipSpaces(offset) @@ -117,7 +116,7 @@ class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val lambdaI var openingBracketOffset = chars.indexOfSkippingSpace(openingBracket, offset) var inBracketsShift = 0 if (openingBracketOffset == null) { - if (braces) { + if (insertLambda) { if (completionChar == ' ' || completionChar == '{') { context.setAddCompletionChar(false) } @@ -151,8 +150,8 @@ class KotlinFunctionInsertHandler(val caretPosition : CaretPosition, val lambdaI PsiDocumentManager.getInstance(context.getProject()).commitDocument(document) - if (lambdaInfo != null && lambdaInfo.explicitParameters) { - insertLambdaTemplate(context, TextRange(openingBracketOffset, closeBracketOffset!! + 1), lambdaInfo.lambdaType) + if (insertLambda && lambdaInfo!!.explicitParameters) { + insertLambdaTemplate(context, TextRange(openingBracketOffset, closeBracketOffset!! + 1), lambdaInfo!!.lambdaType) } } diff --git a/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt b/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt new file mode 100644 index 00000000000..1e6481d03d6 --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt @@ -0,0 +1,9 @@ +fun foo(p : (String, Char) -> Boolean){} + +fun main(args: Array) { + fo(1, 2 +} + +// ELEMENT: "foo" +// TAIL_TEXT: " { String, Char -> ... } ()" +// CHAR: '\t' diff --git a/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt.after b/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt.after new file mode 100644 index 00000000000..d7a7884dcdf --- /dev/null +++ b/idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt.after @@ -0,0 +1,9 @@ +fun foo(p : (String, Char) -> Boolean){} + +fun main(args: Array) { + foo(1, 2 +} + +// ELEMENT: "foo" +// TAIL_TEXT: " { String, Char -> ... } ()" +// CHAR: '\t' diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java index 0d0b8786f8c..c458a472f7b 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/handlers/BasicCompletionHandlerTestGenerated.java @@ -119,6 +119,12 @@ public class BasicCompletionHandlerTestGenerated extends AbstractBasicCompletion doTest(fileName); } + @TestMetadata("ReplaceByLambdaTemplateNoClosingParenth.kt") + public void testReplaceByLambdaTemplateNoClosingParenth() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/ReplaceByLambdaTemplateNoClosingParenth.kt"); + doTest(fileName); + } + @TestMetadata("ReplaceFunctionCallByProperty.kt") public void testReplaceFunctionCallByProperty() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/handlers/basic/ReplaceFunctionCallByProperty.kt");