From 88a54093fe4372d069f84f99f3c73dfecf8fac1c Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Mon, 21 Oct 2024 22:09:04 +0200 Subject: [PATCH] Java: fix triple quote escape handling in "Unnecessarily escaped character" inspection GitOrigin-RevId: 662d5aacf82fadc8a6e980a350200e797d7f7828 --- .../ig/redundancy/UnnecessaryStringEscapeInspection.java | 7 ++++--- .../unnecessary_string_escape/NestedTextBlock.after.java | 7 +++++++ .../unnecessary_string_escape/NestedTextBlock.java | 7 +++++++ .../redundancy/UnnecessaryStringEscapeInspectionTest.java | 3 ++- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.after.java create mode 100644 java/java-tests/testData/ig/com/siyeh/igtest/redundancy/unnecessary_string_escape/NestedTextBlock.java 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(); }