diff --git a/json/src/com/intellij/json/editor/JsonTypedHandler.java b/json/src/com/intellij/json/editor/JsonTypedHandler.java index 075bf2443be7..25965c2ea740 100644 --- a/json/src/com/intellij/json/editor/JsonTypedHandler.java +++ b/json/src/com/intellij/json/editor/JsonTypedHandler.java @@ -49,14 +49,14 @@ public class JsonTypedHandler extends TypedHandlerDelegate { if (c != ':' || !JsonEditorOptions.getInstance().AUTO_WHITESPACE_AFTER_COLON) return; int offset = editor.getCaretModel().getOffset(); PsiDocumentManager.getInstance(file.getProject()).commitDocument(editor.getDocument()); - PsiElement element = PsiTreeUtil.skipWhitespacesBackward(file.findElementAt(offset)); - if (!(element instanceof JsonProperty)) return; + PsiElement element = PsiTreeUtil.getParentOfType(PsiTreeUtil.skipWhitespacesBackward(file.findElementAt(offset)), JsonProperty.class, false); + if (element == null) return; final ASTNode[] children = element.getNode().getChildren(TokenSet.create(JsonElementTypes.COLON)); if (children.length == 0) return; final ASTNode colon = children[0]; final ASTNode next = colon.getTreeNext(); final String text = next.getText(); - if (text.length() == 0 || !StringUtil.isEmptyOrSpaces(text)) { + if (text.length() == 0 || !StringUtil.isEmptyOrSpaces(text) || StringUtil.isLineBreak(text.charAt(0))) { final int insOffset = colon.getStartOffset() + 1; editor.getDocument().insertString(insOffset, " "); editor.getCaretModel().moveToOffset(insOffset + 1); diff --git a/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java b/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java index 11f6a4ecb3d5..70007d9d49e0 100644 --- a/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java +++ b/json/tests/test/com/intellij/json/JsonTypingHandlingTest.java @@ -77,4 +77,16 @@ public class JsonTypingHandlingTest extends JsonTestCase { public void testAutoQuotesForPropNameFalse2() { doTestColon( "{ \"x\"}", "{ \"x:\"}"); } + public void testAutoQuotesAndWhitespaceFollowingNewline() { + doTestColon("{\n" + + " \"a\": 5,\n" + + " x\n" + + " \"q\": 8\n" + + "}", + "{\n" + + " \"a\": 5,\n" + + " \"x\": \n" + + " \"q\": 8\n" + + "}"); + } }