diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/SemanticEditorPosition.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/SemanticEditorPosition.java index 23483aaf056c..b679bef461b6 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/SemanticEditorPosition.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/SemanticEditorPosition.java @@ -147,7 +147,7 @@ public abstract class SemanticEditorPosition { public int getStartOffset() { return myIterator.getStart(); } - + @SuppressWarnings("unused") public boolean isAtAnyOf(@NotNull SyntaxElement... syntaxElements) { if (!myIterator.atEnd()) { @@ -172,6 +172,13 @@ public abstract class SemanticEditorPosition { return -1; } + public boolean hasEmptyLineAfter(int offset) { + for (int i = offset; i < myIterator.getEnd(); i ++) { + if (myChars.charAt(i) == '\n') return true; + } + return false; + } + public EditorEx getEditor() { return myEditor; } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/IndentCalculator.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/IndentCalculator.java index bc3a750762c3..92d6c3c35a42 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/IndentCalculator.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/IndentCalculator.java @@ -57,7 +57,13 @@ class IndentCalculator { return CharArrayUtil.shiftBackward(currPosition.getChars(), currPosition.getStartOffset(), " \t\n\r"); } }; - + + public final static BaseLineOffsetCalculator LINE_AFTER = new BaseLineOffsetCalculator() { + @Override + public int getOffsetInBaseIndentLine(@NotNull SemanticEditorPosition currPosition) { + return CharArrayUtil.shiftForward(currPosition.getChars(), currPosition.getStartOffset(), " \t\n\r"); + } + }; @Nullable String getIndentString(@Nullable Language language, @NotNull SemanticEditorPosition currPosition) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/JavaLikeLangLineIndentProvider.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/JavaLikeLangLineIndentProvider.java index 5999d4f81299..0daff82bbf0f 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/JavaLikeLangLineIndentProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/lineIndent/JavaLikeLangLineIndentProvider.java @@ -85,9 +85,13 @@ public abstract class JavaLikeLangLineIndentProvider implements LineIndentProvid if (getPosition(editor, offset).matchesRule( position -> position.isAt(Whitespace) && position.isAtMultiline())) { - //noinspection StatementWithEmptyBody if (getPosition(editor, offset).before().isAt(Comma)) { - // TODO: Add support + SemanticEditorPosition position = getPosition(editor,offset); + if (position.hasEmptyLineAfter(offset) && + !position.after().isAtAnyOf(ArrayClosingBracket, BlockOpeningBrace, BlockClosingBrace, RightParenthesis) && + !position.isAtEnd()) { + return myFactory.createIndentCalculator(NONE, IndentCalculator.LINE_AFTER); + } } else if (getPosition(editor, offset + 1).isAt(BlockClosingBrace)) { return myFactory.createIndentCalculator(