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 4c8fef3b7ce1..b2e8b67ad3de 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/JavaTypedHandler.java @@ -28,7 +28,6 @@ import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; @@ -193,6 +192,9 @@ public class JavaTypedHandler extends TypedHandlerDelegate { char charAt = editor.getDocument().getCharsSequence().charAt(offset); if (charAt != ';') return false; + HighlighterIterator hi = ((EditorEx)editor).getHighlighter().createIterator(offset); + if (hi.atEnd() || hi.getTokenType() != JavaTokenType.SEMICOLON) return false; + EditorModificationUtil.moveCaretRelatively(editor, 1); return true; } diff --git a/java/java-tests/testData/codeInsight/typing/semicolonInComment_after.java b/java/java-tests/testData/codeInsight/typing/semicolonInComment_after.java new file mode 100644 index 000000000000..6987afa6f314 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/semicolonInComment_after.java @@ -0,0 +1,2 @@ +// ;; +class C {} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/typing/semicolonInComment_before.java b/java/java-tests/testData/codeInsight/typing/semicolonInComment_before.java new file mode 100644 index 000000000000..9569ba70cd63 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/semicolonInComment_before.java @@ -0,0 +1,2 @@ +// ; +class C {} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_after.java b/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_after.java new file mode 100644 index 000000000000..172a44a3d157 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_after.java @@ -0,0 +1,3 @@ +class C { + String s = ";;"; +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_before.java b/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_before.java new file mode 100644 index 000000000000..b8ea4dfd0a75 --- /dev/null +++ b/java/java-tests/testData/codeInsight/typing/semicolonInStringLiteral_before.java @@ -0,0 +1,3 @@ +class C { + String s = ";"; +} \ 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 9da3d9d82d1f..f60db32cf61e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/JavaTypingTest.java @@ -101,7 +101,15 @@ public class JavaTypingTest extends LightPlatformCodeInsightFixtureTestCase { public void testInsertPairedBraceForLambdaBody() { doTest('{'); } - + + public void testSemicolonInStringLiteral() { + doTest(';'); + } + + public void testSemicolonInComment() { + doTest(';'); + } + private void doTest(char c) { myFixture.configureByFile(getTestName(true) + "_before.java"); myFixture.type(c);