From 3ecae800af9208596f766b19420dcf71639fa86d Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 14 Nov 2014 12:59:46 +0300 Subject: [PATCH] Code completion: fixed comma key behavior for function with parameters + more tests --- .../handlers/KotlinCallableInsertHandler.kt | 14 +++++++---- .../handlers/charFilter/CommaForFunction1.kt | 8 ++++++ .../charFilter/CommaForFunction1.kt.after | 8 ++++++ .../handlers/charFilter/CommaForFunction2.kt | 8 ++++++ .../charFilter/CommaForFunction2.kt.after | 8 ++++++ .../handlers/charFilter/DotAfterFun1.kt | 8 ++++++ .../handlers/charFilter/DotAfterFun1.kt.after | 8 ++++++ .../handlers/charFilter/DotAfterFun2.kt | 8 ++++++ .../handlers/charFilter/DotAfterFun2.kt.after | 8 ++++++ .../CompletionCharFilterTestGenerated.java | 25 +++++++++++++++++++ 10 files changed, 98 insertions(+), 5 deletions(-) create mode 100644 idea/testData/completion/handlers/charFilter/CommaForFunction1.kt create mode 100644 idea/testData/completion/handlers/charFilter/CommaForFunction1.kt.after create mode 100644 idea/testData/completion/handlers/charFilter/CommaForFunction2.kt create mode 100644 idea/testData/completion/handlers/charFilter/CommaForFunction2.kt.after create mode 100644 idea/testData/completion/handlers/charFilter/DotAfterFun1.kt create mode 100644 idea/testData/completion/handlers/charFilter/DotAfterFun1.kt.after create mode 100644 idea/testData/completion/handlers/charFilter/DotAfterFun2.kt create mode 100644 idea/testData/completion/handlers/charFilter/DotAfterFun2.kt.after diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt index 67a9b828616..d83ce8884fa 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/KotlinCallableInsertHandler.kt @@ -163,14 +163,12 @@ public class JetFunctionInsertHandler(val caretPosition : CaretPosition, val lam } openingBracketOffset = indexOfSkippingSpace(document, openingBracket, offset) - assert (openingBracketOffset != -1) { "If there wasn't open bracket it should already have been inserted" } + assert(openingBracketOffset != -1, "If there wasn't open bracket it should already have been inserted") val closeBracketOffset = indexOfSkippingSpace(document, closingBracket, openingBracketOffset + 1) val editor = context.getEditor() - var forcePlaceCaretIntoParentheses = completionChar == '(' - - if (caretPosition == CaretPosition.IN_BRACKETS || forcePlaceCaretIntoParentheses || closeBracketOffset == -1) { + if (shouldPlaceCaretInBrackets(completionChar) || closeBracketOffset == -1) { editor.getCaretModel().moveToOffset(openingBracketOffset + 1 + inBracketsShift) AutoPopupController.getInstance(context.getProject())?.autoPopupParameterInfo(editor, offsetElement) } @@ -178,13 +176,19 @@ public class JetFunctionInsertHandler(val caretPosition : CaretPosition, val lam editor.getCaretModel().moveToOffset(closeBracketOffset + 1) } - PsiDocumentManager.getInstance(context.getProject()).commitDocument(context.getDocument()) + PsiDocumentManager.getInstance(context.getProject()).commitDocument(document) if (lambdaInfo != null && lambdaInfo.explicitParameters) { insertLambdaTemplate(context, TextRange(openingBracketOffset, closeBracketOffset + 1), lambdaInfo.lambdaType) } } + private fun shouldPlaceCaretInBrackets(completionChar: Char): Boolean { + if (completionChar == ',' || completionChar == '.') return false + if (completionChar == '(') return true + return caretPosition == CaretPosition.IN_BRACKETS + } + class object { public val NO_PARAMETERS_HANDLER: JetFunctionInsertHandler = JetFunctionInsertHandler(CaretPosition.AFTER_BRACKETS, null) public val WITH_PARAMETERS_HANDLER: JetFunctionInsertHandler = JetFunctionInsertHandler(CaretPosition.IN_BRACKETS, null) diff --git a/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt b/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt new file mode 100644 index 00000000000..b1255efecd7 --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt @@ -0,0 +1,8 @@ +fun foo() {} + +fun bar() { + x() +} + +// ELEMENT: foo +// CHAR: ',' diff --git a/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt.after b/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt.after new file mode 100644 index 00000000000..1079dfeb8cd --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/CommaForFunction1.kt.after @@ -0,0 +1,8 @@ +fun foo() {} + +fun bar() { + x(foo(), ) +} + +// ELEMENT: foo +// CHAR: ',' diff --git a/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt b/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt new file mode 100644 index 00000000000..5422b8ed6ca --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt @@ -0,0 +1,8 @@ +fun foo(p: Int) {} + +fun bar() { + x() +} + +// ELEMENT: foo +// CHAR: ',' diff --git a/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt.after b/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt.after new file mode 100644 index 00000000000..6fe2d82397e --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/CommaForFunction2.kt.after @@ -0,0 +1,8 @@ +fun foo(p: Int) {} + +fun bar() { + x(foo(), ) +} + +// ELEMENT: foo +// CHAR: ',' diff --git a/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt b/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt new file mode 100644 index 00000000000..9cfc9643095 --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt @@ -0,0 +1,8 @@ +fun foo(): String = "" + +fun bar() { + +} + +// ELEMENT: foo +// CHAR: . diff --git a/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt.after b/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt.after new file mode 100644 index 00000000000..d0a4b12208e --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/DotAfterFun1.kt.after @@ -0,0 +1,8 @@ +fun foo(): String = "" + +fun bar() { + foo(). +} + +// ELEMENT: foo +// CHAR: . diff --git a/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt b/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt new file mode 100644 index 00000000000..452de2f57f2 --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt @@ -0,0 +1,8 @@ +fun foo(p: Int): String = "" + +fun bar() { + +} + +// ELEMENT: foo +// CHAR: . diff --git a/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt.after b/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt.after new file mode 100644 index 00000000000..08d8be3c426 --- /dev/null +++ b/idea/testData/completion/handlers/charFilter/DotAfterFun2.kt.after @@ -0,0 +1,8 @@ +fun foo(p: Int): String = "" + +fun bar() { + foo(). +} + +// ELEMENT: foo +// CHAR: . diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/CompletionCharFilterTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/handlers/CompletionCharFilterTestGenerated.java index 5dbee37afa7..fd889296e46 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/CompletionCharFilterTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/handlers/CompletionCharFilterTestGenerated.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.completion.handlers; import com.intellij.testFramework.TestDataPath; import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; import org.junit.runner.RunWith; @@ -71,6 +72,18 @@ public class CompletionCharFilterTestGenerated extends AbstractCompletionCharFil doTest(fileName); } + @TestMetadata("CommaForFunction1.kt") + public void testCommaForFunction1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/CommaForFunction1.kt"); + doTest(fileName); + } + + @TestMetadata("CommaForFunction2.kt") + public void testCommaForFunction2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/CommaForFunction2.kt"); + doTest(fileName); + } + @TestMetadata("ConstructorWithLambdaArg1.kt") public void testConstructorWithLambdaArg1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/ConstructorWithLambdaArg1.kt"); @@ -89,6 +102,18 @@ public class CompletionCharFilterTestGenerated extends AbstractCompletionCharFil doTest(fileName); } + @TestMetadata("DotAfterFun1.kt") + public void testDotAfterFun1() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/DotAfterFun1.kt"); + doTest(fileName); + } + + @TestMetadata("DotAfterFun2.kt") + public void testDotAfterFun2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/DotAfterFun2.kt"); + doTest(fileName); + } + @TestMetadata("FunctionWithLambdaArg1.kt") public void testFunctionWithLambdaArg1() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/charFilter/FunctionWithLambdaArg1.kt");