diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/enter/EnterAfterUnmatchedBraceHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/enter/EnterAfterUnmatchedBraceHandler.java index 17abf8bf0c45..f7e74f06d3d2 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/enter/EnterAfterUnmatchedBraceHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/enter/EnterAfterUnmatchedBraceHandler.java @@ -102,14 +102,15 @@ public class EnterAfterUnmatchedBraceHandler extends EnterHandlerDelegateAdapter } /** - * Calculates the precise number of '}' that have to be inserted by handler. + * Calculates the string of '}' that have to be inserted by handler. + * Some languages can expand the string by additional characters (i.e. '\', ';') * * @param editor target editor * @param caretOffset target caret offset * @param maxRBraceCount the maximum number of '}' for insert at position, it always positive - * @return number of '}' that has to be inserted by handler, it has to positive + * @return the string of '}' that has to be inserted by handler, it must have at least one '}' */ - protected int adjustRBraceCountForPosition(@NotNull final Editor editor, int caretOffset, int maxRBraceCount) { + protected String adjustRBraceCountForPosition(@NotNull final Editor editor, int caretOffset, int maxRBraceCount) { assert maxRBraceCount > 0; CharSequence text = editor.getDocument().getCharsSequence(); @@ -123,7 +124,7 @@ public class EnterAfterUnmatchedBraceHandler extends EnterHandlerDelegateAdapter break; } } - return Math.max(bracesToInsert, 1); + return StringUtil.repeatSymbol('}', Math.max(bracesToInsert, 1)); } /** @@ -157,22 +158,21 @@ public class EnterAfterUnmatchedBraceHandler extends EnterHandlerDelegateAdapter } /** - * Inserts the rBracesCount of '}' at the rBracesInsertOffset position and formats the code block. - * + * Inserts the generatedRBraces at the rBracesInsertOffset position and formats the code block. * @param file target PSI file * @param editor target editor * @param caretOffset target caret offset * @param rBracesInsertOffset target position to insert - * @param rBracesCount count of '}' to insert + * @param generatedRBraces string of '}' to insert */ protected void insertRBraces(@NotNull PsiFile file, @NotNull Editor editor, int caretOffset, int rBracesInsertOffset, - int rBracesCount) { + String generatedRBraces) { final Document document = editor.getDocument(); - insertRBracesAtPosition(document, caretOffset, rBracesInsertOffset, rBracesCount); - formatCodeFragmentBetweenBraces(file, document, caretOffset, rBracesInsertOffset, rBracesCount); + insertRBracesAtPosition(document, caretOffset, rBracesInsertOffset, generatedRBraces); + formatCodeFragmentBetweenBraces(file, document, caretOffset, rBracesInsertOffset, generatedRBraces); } /** @@ -181,10 +181,10 @@ public class EnterAfterUnmatchedBraceHandler extends EnterHandlerDelegateAdapter * @param document target document * @param caretOffset target caret offset * @param rBracesInsertOffset target position to insert - * @param rBracesCount count of '}' to insert + * @param generatedRBraces string of '}' to insert */ - protected void insertRBracesAtPosition(Document document, int caretOffset, int rBracesInsertOffset, int rBracesCount) { - document.insertString(rBracesInsertOffset, "\n" + StringUtil.repeatSymbol('}', rBracesCount)); + protected void insertRBracesAtPosition(Document document, int caretOffset, int rBracesInsertOffset, String generatedRBraces) { + document.insertString(rBracesInsertOffset, "\n" + generatedRBraces); // We need to adjust indents of the text that will be moved, hence, need to insert preliminary line feed. // Example: // if (test1()) { @@ -210,13 +210,13 @@ public class EnterAfterUnmatchedBraceHandler extends EnterHandlerDelegateAdapter * @param document target document * @param caretOffset target caret offset * @param rBracesInsertOffset target position to insert - * @param rBracesCount count of '}' to insert + * @param generatedRBraces string of '}' to insert */ protected void formatCodeFragmentBetweenBraces(@NotNull PsiFile file, @NotNull Document document, int caretOffset, int rBracesInsertOffset, - int rBracesCount) { + String generatedRBraces) { Project project = file.getProject(); long stamp = document.getModificationStamp(); boolean closingBraceIndentAdjusted;