diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/SnippetMarkup.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/SnippetMarkup.java index e0bb6b8c0250..3ae4b18ab3fc 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/SnippetMarkup.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/SnippetMarkup.java @@ -722,6 +722,11 @@ public class SnippetMarkup { Selector selector = replace.selector(); String replacement = replace.replacement(); if (selector instanceof Regex regex) { + boolean addLineBreak = false; + if (content.endsWith("\n")) { + content = content.substring(0, content.length() - 1); + addLineBreak = true; + } try { content = regex.pattern().matcher(StringUtil.newBombedCharSequence(content, 1000)).replaceAll(replacement); } @@ -735,6 +740,9 @@ public class SnippetMarkup { replace.range(), JavaBundle.message("javadoc.snippet.error.malformed.replacement", "replace", replacement, e.getMessage())); visitor.visitError(replacementError); } + if (addLineBreak) { + content += "\n"; + } } else if (selector instanceof Substring substring) { content = content.replace(substring.substring(), replacement); diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/SnippetMarkupTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/SnippetMarkupTest.java index 02af1d2e8ad6..5914f867311a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/SnippetMarkupTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/javadoc/SnippetMarkupTest.java @@ -376,6 +376,15 @@ public class SnippetMarkupTest { testVisitor("// @replace regex=\"(a*)*b\" replacement='z':\n" + str, null, true, "Error: @replace: too complex regular expression '(a*)*b'\n" + str); } + + @Test + public void visitorRegexpDotAsterisk() { + testVisitor(""" + // @start region=main + aaaa // @replace regex=".*" replacement="." + // @end region=main + """, null, true, "..\n"); + } private static void testParsing(@NotNull String input, @NotNull String expected) { assertEquals(expected, SnippetMarkup.parse(input).toString());