diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaLineIndentProvider.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaLineIndentProvider.java index 3eeecf4c4baf..3ff266534a19 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaLineIndentProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaLineIndentProvider.java @@ -52,6 +52,7 @@ public class JavaLineIndentProvider extends JavaLikeLangLineIndentProvider { SYNTAX_MAP.put(JavaTokenType.C_STYLE_COMMENT, BlockComment); SYNTAX_MAP.put(JavaDocTokenType.DOC_COMMENT_START, DocBlockStart); SYNTAX_MAP.put(JavaDocTokenType.DOC_COMMENT_END, DocBlockEnd); + SYNTAX_MAP.put(JavaTokenType.COMMA, Comma); } @Nullable 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 319ed818c5bd..64004c27ae6d 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 @@ -88,6 +88,20 @@ public abstract class SemanticEditorPosition { } return this; } + + public SemanticEditorPosition findLeftParenthesisBackwardsSkippingNested(@NotNull SyntaxElement leftParenthesis, + @NotNull SyntaxElement rightParenthesis) { + while (!myIterator.atEnd()) { + if (rightParenthesis.equals(map(myIterator.getTokenType()))) { + beforeParentheses(leftParenthesis, rightParenthesis); + } + else if (leftParenthesis.equals(map(myIterator.getTokenType()))) { + break; + } + myIterator.retreat(); + } + return this; + } public boolean isAfterOnSameLine(@NotNull SyntaxElement... syntaxElements) { myIterator.retreat(); 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 5ecf62927ee4..1b036f2a0ede 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 @@ -54,7 +54,8 @@ public abstract class JavaLikeLangLineIndentProvider extends FormatterBasedLineI ForKeyword, BlockComment, DocBlockStart, - DocBlockEnd + DocBlockEnd, + Comma } @@ -79,7 +80,22 @@ public abstract class JavaLikeLangLineIndentProvider extends FormatterBasedLineI if (getPosition(editor, offset).matchesRule( position -> position.isAt(Whitespace) && position.isAtMultiline())) { - if (getPosition(editor, offset).matchesRule( + //noinspection StatementWithEmptyBody + if (getPosition(editor, offset).before().isAt(Comma)) { + // TODO: Add support + } + else if (getPosition(editor, offset + 1).isAt(BlockClosingBrace)) { + return myFactory.createIndentCalculator( + NONE, + position -> { + position.findLeftParenthesisBackwardsSkippingNested(BlockOpeningBrace, BlockClosingBrace); + if (!position.isAtEnd()) { + return getBlockStartOffset(position); + } + return -1; + }); + } + else if (getPosition(editor, offset).matchesRule( position -> position .before() .beforeOptional(Semicolon)