From 83b4e7e39b2f29f81806e19ebe127aaf11f1e044 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 1 Feb 2016 20:00:04 +0300 Subject: [PATCH] IDEA-115612 Insert pair brace before dot in Java --- .../codeInsight/editorActions/JavaTypedHandler.java | 10 ++++++++-- .../codeInsight/highlighting/JavaBraceMatcher.java | 5 +++-- .../typing/insertPairedBraceBeforeDot_after.java | 5 +++++ .../typing/insertPairedBraceBeforeDot_before.java | 5 +++++ .../com/intellij/codeInsight/JavaTypingTest.java | 6 +++++- 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_after.java create mode 100644 java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_before.java diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java index 5d2acb275291..6c6b9720ac33 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -146,10 +146,16 @@ public class JavaTypedHandler extends TypedHandlerDelegate { }, "Insert block statement", null); return Result.STOP; } + + if (leaf != null && PsiTreeUtil.getParentOfType(PsiTreeUtil.prevVisibleLeaf(leaf), PsiNewExpression.class, true, + PsiCodeBlock.class, PsiMember.class) != null) { + return Result.CONTINUE; + } + if (PsiTreeUtil.getParentOfType(leaf, PsiCodeBlock.class, false, PsiMember.class) != null) { EditorModificationUtil.insertStringAtCaret(editor, "{"); TypedHandler.indentOpenedBrace(project, editor); - return Result.STOP; + return Result.STOP; // use case: manually wrapping part of method's code in 'if', 'while', etc } } diff --git a/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaBraceMatcher.java b/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaBraceMatcher.java index ffb589a07873..fbf403685224 100644 --- a/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaBraceMatcher.java +++ b/java/java-impl/src/com/intellij/codeInsight/highlighting/JavaBraceMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -53,7 +53,8 @@ public class JavaBraceMatcher implements PairedBraceMatcher { || tokenType == JavaTokenType.RPARENTH || tokenType == JavaTokenType.RBRACKET || tokenType == JavaTokenType.RBRACE - || tokenType == JavaTokenType.LBRACE; + || tokenType == JavaTokenType.LBRACE + || tokenType == JavaTokenType.DOT; } @Override diff --git a/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_after.java b/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_after.java new file mode 100644 index 000000000000..a76ace24e3e7 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_after.java @@ -0,0 +1,5 @@ +class A { + void m() { + new Runnable() {}.run(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_before.java b/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_before.java new file mode 100644 index 000000000000..7b5977d60fe3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/insertPairedBraceBeforeDot_before.java @@ -0,0 +1,5 @@ +class A { + void m() { + new Runnable() .run(); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java index 06a2fc9b6274..b1f2f9c80c97 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -94,6 +94,10 @@ public class JavaTypingTest extends LightPlatformCodeInsightFixtureTestCase { doTest('('); } + public void testInsertPairedBraceBeforeDot() { + doTest('{'); + } + private void doTest(char c) { myFixture.configureByFile(getTestName(true) + "_before.java"); myFixture.type(c);