From ee299a720ad541ef8ddffd299e37407c1938f14b Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 18 Nov 2014 15:49:24 +0300 Subject: [PATCH] fixed PY-14433 Fill Paragraph: Invalid range specified: (504,502); Throwable at com.intellij.openapi.util.TextRange.assertProperRange --- .../editorActions/fillParagraph/ParagraphFillHandler.java | 5 +++-- python/testData/fillParagraph/emptyMultilineString.py | 3 +++ python/testData/fillParagraph/emptyMultilineString_after.py | 3 +++ python/testSrc/com/jetbrains/python/PyFillParagraphTest.java | 5 ++++- 4 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 python/testData/fillParagraph/emptyMultilineString.py create mode 100644 python/testData/fillParagraph/emptyMultilineString_after.py diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/fillParagraph/ParagraphFillHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/fillParagraph/ParagraphFillHandler.java index 3aeefefd55ec..930148b05e5c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/fillParagraph/ParagraphFillHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/fillParagraph/ParagraphFillHandler.java @@ -4,6 +4,7 @@ import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.UnfairTextRange; import com.intellij.openapi.util.text.CharFilter; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; @@ -82,7 +83,7 @@ public class ParagraphFillHandler { private TextRange getTextRange(@NotNull final PsiElement element, @NotNull final Editor editor) { int startOffset = getStartOffset(element, editor); int endOffset = getEndOffset(element, editor); - return TextRange.create(startOffset, endOffset); + return new UnfairTextRange(startOffset, endOffset); } private int getStartOffset(@NotNull final PsiElement element, @NotNull final Editor editor) { @@ -105,7 +106,7 @@ public class ParagraphFillHandler { } lineNumber -= 1; } - final int lineStartOffset = document.getLineStartOffset(lineNumber); + final int lineStartOffset = lineNumber == document.getLineNumber(elementTextOffset) ? elementTextOffset : document.getLineStartOffset(lineNumber); final String lineText = document .getText(TextRange.create(lineStartOffset, document.getLineEndOffset(lineNumber))); int shift = StringUtil.findFirst(lineText, CharFilter.NOT_WHITESPACE_FILTER); diff --git a/python/testData/fillParagraph/emptyMultilineString.py b/python/testData/fillParagraph/emptyMultilineString.py new file mode 100644 index 000000000000..5180c20fbd92 --- /dev/null +++ b/python/testData/fillParagraph/emptyMultilineString.py @@ -0,0 +1,3 @@ +a = """ + +""" \ No newline at end of file diff --git a/python/testData/fillParagraph/emptyMultilineString_after.py b/python/testData/fillParagraph/emptyMultilineString_after.py new file mode 100644 index 000000000000..277257c94d71 --- /dev/null +++ b/python/testData/fillParagraph/emptyMultilineString_after.py @@ -0,0 +1,3 @@ +a = """ + +""" \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyFillParagraphTest.java b/python/testSrc/com/jetbrains/python/PyFillParagraphTest.java index 287c65f9e8a1..0fd99a9772b7 100644 --- a/python/testSrc/com/jetbrains/python/PyFillParagraphTest.java +++ b/python/testSrc/com/jetbrains/python/PyFillParagraphTest.java @@ -20,7 +20,6 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.ActionManager; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.command.CommandProcessor; -import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.jetbrains.python.fixtures.PyTestCase; @@ -62,6 +61,10 @@ public class PyFillParagraphTest extends PyTestCase { doTest(); } + public void testEmptyMultilineString() { + doTest(); + } + public void testEnter() { final CommonCodeStyleSettings settings = CodeStyleSettingsManager.getInstance(myFixture.getProject()).getCurrentSettings().getCommonSettings(PythonLanguage.getInstance());