diff --git a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java index 993447fca74c..9bf79ed3b465 100644 --- a/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java +++ b/xml/impl/src/com/intellij/codeInsight/editorActions/XmlSlashTypedHandler.java @@ -19,6 +19,7 @@ import com.intellij.application.options.editor.WebEditorOptions; import com.intellij.ide.highlighter.XmlLikeFileType; import com.intellij.lang.ASTNode; import com.intellij.lang.xml.XMLLanguage; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.editor.ScrollType; @@ -26,6 +27,7 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; +import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.impl.source.tree.TreeUtil; import com.intellij.psi.templateLanguages.OuterLanguageElement; import com.intellij.psi.tree.IElementType; @@ -113,6 +115,7 @@ public class XmlSlashTypedHandler extends TypedHandlerDelegate { } } EditorModificationUtil.insertStringAtCaret(editor, tag.getName() + ">", false); + autoIndent(editor); return Result.STOP; } } @@ -165,4 +168,15 @@ public class XmlSlashTypedHandler extends TypedHandlerDelegate { } return false; } + + private static void autoIndent(@NotNull Editor editor) { + Project project = editor.getProject(); + if (project != null) { + PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); + Document document = editor.getDocument(); + documentManager.commitDocument(document); + int lineOffset = document.getLineStartOffset(document.getLineNumber(editor.getCaretModel().getOffset())); + CodeStyleManager.getInstance(project).adjustLineIndent(document, lineOffset); + } + } } \ No newline at end of file diff --git a/xml/tests/src/com/intellij/codeInsight/completion/XmlTypedHandlersTest.java b/xml/tests/src/com/intellij/codeInsight/completion/XmlTypedHandlersTest.java index 57f4573a5ee0..c3b9d4bb5b5a 100644 --- a/xml/tests/src/com/intellij/codeInsight/completion/XmlTypedHandlersTest.java +++ b/xml/tests/src/com/intellij/codeInsight/completion/XmlTypedHandlersTest.java @@ -48,8 +48,8 @@ public class XmlTypedHandlersTest extends LightPlatformCodeInsightFixtureTestCas "<\n" + "<\n" + "", '/', "\n" + - "\n" + - "\n" + + " \n" + + " \n" + ""); } @@ -68,8 +68,8 @@ public class XmlTypedHandlersTest extends LightPlatformCodeInsightFixtureTestCas "<\n" + "<\n" + "", '/', "\n" + - "\n" + - "\n" + + " \n" + + " \n" + ""); } @@ -167,6 +167,24 @@ public class XmlTypedHandlersTest extends LightPlatformCodeInsightFixtureTestCas doTest("< ?>", '?', " ?>"); } + public void testAutoindentEndTag() throws Exception { + doTest( + "
\n" + + "

\n" + + " Some text\n" + + "

\n" + + " <", + + '/', + + "
\n" + + "

\n" + + " Some text\n" + + "

\n" + + "
" + ); + } + private void doTest(String text, char c, String result) { myFixture.configureByText(XmlFileType.INSTANCE, text); myFixture.type(c);