diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerBlankLinesTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerBlankLinesTest.groovy
index 0b4e838382de..b456d41aa300 100644
--- a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerBlankLinesTest.groovy
+++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerBlankLinesTest.groovy
@@ -131,4 +131,16 @@ class Test {
}'''
doTest(initial: text, expected: text, rules: [rule(CLASS)] )
}
+
+ void "test statements on the same line"() {
+ def before = '''\
+
+
+
+public enum Sender {a, b; private String value;
+}
+'''
+ doTest(initial: before, expected: before)
+ }
+
}
diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java
index b0c22a6fc635..5bf8b5259e3d 100644
--- a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java
+++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java
@@ -639,6 +639,10 @@ public class ArrangementEngine {
}
}
+ /**
+ * @return position x for which myDocument.getText().substring(x, startOffset) contains
+ * blankLinesNumber line feeds and myDocument.getText.charAt(x-1) == '\n'
+ */
private int getBlankLineOffset(int blankLinesNumber, int startOffset) {
int startLine = myDocument.getLineNumber(startOffset);
if (startLine <= 0) {
diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEntryWrapper.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEntryWrapper.java
index a801774f5def..158c559a0608 100644
--- a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEntryWrapper.java
+++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEntryWrapper.java
@@ -119,25 +119,17 @@ public class ArrangementEntryWrapper {
@SuppressWarnings("AssignmentToForLoopParameter")
public void updateBlankLines(@NotNull Document document) {
- int startLine = document.getLineNumber(getStartOffset());
myBlankLinesBefore = 0;
- if (startLine <= 0) {
- return;
- }
-
+ int lineFeeds = 0;
CharSequence text = document.getCharsSequence();
- int lastLineFeed = document.getLineStartOffset(startLine) - 1;
- for (int i = lastLineFeed - 1; i >= 0; i--) {
- i = CharArrayUtil.shiftBackward(text, i, " \t");
- if (text.charAt(i) == '\n') {
- ++myBlankLinesBefore;
- }
- else {
- break;
- }
+ for (int current = getStartOffset() - 1; current >= 0; current--) {
+ current = CharArrayUtil.shiftBackward(text, current, " \t");
+ if (text.charAt(current) == '\n') lineFeeds++;
+ else break;
}
+ if (lineFeeds > 0) myBlankLinesBefore = lineFeeds - 1;
}
-
+
public void setNext(@Nullable ArrangementEntryWrapper next) {
myNext = next;
}