From 26f25b917d654a8612fe200cdd3f92ec12a3c8ae Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 9 Jul 2015 18:47:48 +0200 Subject: [PATCH] IDEA-68660 ctrl-shift-enter does not insert a semicolon after anonymous implementation --- .../smartEnter/JavaSmartEnterProcessor.java | 9 +++++++-- .../AddMissingSemicolonAfterAnonymous.java | 10 ++++++++++ .../AddMissingSemicolonAfterAnonymous_after.java | 10 ++++++++++ .../intellij/codeInsight/CompleteStatementTest.java | 2 ++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous.java create mode 100644 java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavaSmartEnterProcessor.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavaSmartEnterProcessor.java index 0af22d369e76..a5b28cb663bd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavaSmartEnterProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavaSmartEnterProcessor.java @@ -274,10 +274,15 @@ public class JavaSmartEnterProcessor extends SmartEnterProcessor { @Override @Nullable protected PsiElement getStatementAtCaret(Editor editor, PsiFile psiFile) { - final PsiElement atCaret = super.getStatementAtCaret(editor, psiFile); + PsiElement atCaret = super.getStatementAtCaret(editor, psiFile); if (atCaret instanceof PsiWhiteSpace) return null; - if (atCaret instanceof PsiJavaToken && "}".equals(atCaret.getText()) && !(atCaret.getParent() instanceof PsiArrayInitializerExpression)) return null; + if (atCaret instanceof PsiJavaToken && "}".equals(atCaret.getText())) { + atCaret = atCaret.getParent(); + if (!(atCaret instanceof PsiAnonymousClass || atCaret instanceof PsiArrayInitializerExpression)) { + return null; + } + } PsiElement statementAtCaret = PsiTreeUtil.getParentOfType(atCaret, PsiStatement.class, diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous.java new file mode 100644 index 000000000000..f9be4ba5b79a --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous.java @@ -0,0 +1,10 @@ +class Foo { + void a() { + Runnable r = new Runnable() { + @Override + public void run() { + + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous_after.java b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous_after.java new file mode 100644 index 000000000000..ac1418a603f0 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/AddMissingSemicolonAfterAnonymous_after.java @@ -0,0 +1,10 @@ +class Foo { + void a() { + Runnable r = new Runnable() { + @Override + public void run() { + + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java index b39819de6490..5741767274c8 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java @@ -33,6 +33,8 @@ public class CompleteStatementTest extends EditorActionTestCase { public void testAddMissingSemicolonToPackageStatement() { doTest(); } + public void testAddMissingSemicolonAfterAnonymous() { doTest(); } + public void testAddMissingParen() throws Exception { doTest(); } public void testCompleteIf() throws Exception { doTest(); }