From 3da865964d6711ac4900d4bc731b6bccd6dba794 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 1 Dec 2015 12:30:04 +0100 Subject: [PATCH] IDEA-148389 Smart completion inserts extra colon if existing colon is on the next line --- .../smartType/ConditionalColonOnNextLine-out.java | 9 +++++++++ .../completion/smartType/ConditionalColonOnNextLine.java | 9 +++++++++ .../codeInsight/completion/SmartTypeCompletionTest.java | 1 + .../lang-api/src/com/intellij/codeInsight/TailType.java | 9 ++++----- 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine-out.java create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine.java diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine-out.java new file mode 100644 index 000000000000..3229156f4f77 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine-out.java @@ -0,0 +1,9 @@ +class Bar { + int zoooa() {} + int zooob() {} + + int foo() { + return true ? zoooa() + : 2; + } +} diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine.java b/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine.java new file mode 100644 index 000000000000..b9d96be49d1a --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/ConditionalColonOnNextLine.java @@ -0,0 +1,9 @@ +class Bar { + int zoooa() {} + int zooob() {} + + int foo() { + return true ? zoo + : 2; + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index a48109935ecf..e8452836bd90 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -724,6 +724,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase { public void testMethodColon() throws Exception { doFirstItemTest(':'); } public void testVariableColon() throws Exception { doFirstItemTest(':'); } + public void testConditionalColonOnNextLine() { doFirstItemTest(':'); } private void doFirstItemTest(char c) { configureByTestName(); diff --git a/platform/lang-api/src/com/intellij/codeInsight/TailType.java b/platform/lang-api/src/com/intellij/codeInsight/TailType.java index 881726046811..75c69b9678f1 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/TailType.java +++ b/platform/lang-api/src/com/intellij/codeInsight/TailType.java @@ -27,6 +27,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.psi.util.PsiUtilCore; +import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; /** @@ -158,11 +159,9 @@ public abstract class TailType { int textLength = document.getTextLength(); CharSequence chars = document.getCharsSequence(); - if (tailOffset < textLength - 1 && chars.charAt(tailOffset) == ' ' && chars.charAt(tailOffset + 1) == ':') { - return moveCaret(editor, tailOffset, 2); - } - if (tailOffset < textLength && chars.charAt(tailOffset) == ':') { - return moveCaret(editor, tailOffset, 1); + int afterWhitespace = CharArrayUtil.shiftForward(chars, tailOffset, " \n\t"); + if (afterWhitespace < textLength && chars.charAt(afterWhitespace) == ':') { + return moveCaret(editor, tailOffset, afterWhitespace - tailOffset + 1); } document.insertString(tailOffset, " : "); return moveCaret(editor, tailOffset, 3);