diff --git a/java/java-impl/src/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspection.java b/java/java-impl/src/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspection.java index d95640d195eb..a8abbf7e452b 100644 --- a/java/java-impl/src/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspection.java +++ b/java/java-impl/src/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspection.java @@ -181,10 +181,11 @@ public final class UnnecessaryStringEscapeInspection extends BaseInspection impl else if (ch == '"' && doubleQuotes < 2) { if (i == end - 1) return -1; if (i == end - 2) return i - 1; - if (i < end - 2 && text.charAt(i + 1) == '"') { - if (doubleQuotes != 1 && text.charAt(i + 2) != '"') return i - 1; + if (doubleQuotes == 1) { + if (!text.startsWith("\"", i + 1) && !text.startsWith("\\\"", i + 1)) return i - 1; } - else { + else if (!text.startsWith("\"\"", i + 1) && !text.startsWith("\\\"\"", i + 1) && + !text.startsWith("\"\\\"", i + 1) && !text.startsWith("\\\"\\\"", i + 1)) { return i - 1; } } diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.after.java b/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.after.java new file mode 100644 index 000000000000..f73a2126894e --- /dev/null +++ b/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.after.java @@ -0,0 +1,7 @@ +class NestedTextBlock { + String s = """ + String s = \""" + test + \"""; +"""; +} \ No newline at end of file diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.java b/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.java new file mode 100644 index 000000000000..c5bdf66b682b --- /dev/null +++ b/java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.java @@ -0,0 +1,7 @@ +class NestedTextBlock { + String s = """ + String s = \"\"\" + test + \"\"\"; +"""; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspectionTest.java b/java/java-tests/testSrc/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspectionTest.java index c60bc1951ed1..303662d68b6b 100644 --- a/java/java-tests/testSrc/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspectionTest.java +++ b/java/java-tests/testSrc/com/siyeh/ig/redundancy/UnnecessaryStringEscapeInspectionTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.siyeh.ig.redundancy; import com.intellij.codeInspection.InspectionProfileEntry; @@ -20,6 +20,7 @@ public class UnnecessaryStringEscapeInspectionTest extends LightJavaInspectionTe public void testEscapedNewLine() { doQuickFixTest(); } public void testStringTemplate1() { doQuickFixTest(); } public void testStringTemplate2() { doQuickFixTest(); } + public void testNestedTextBlock() { doQuickFixTest(); } public void testEscapedNewLineNotUnnecessary() { doTest(); } public void testBrokenCode() { doTest(); }