From c9bfa6799280da6215bf3a151bd2b8505025c6c5 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Sat, 18 Mar 2017 09:03:45 +0100 Subject: [PATCH] IG: don't report (more) invisible characters as unnecessary escapes (IDEA-169813) --- .../UnnecessaryUnicodeEscapeInspection.java | 17 +++++++++++++++-- .../UnnecessaryUnicodeEscape.java | 3 +++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/internationalization/UnnecessaryUnicodeEscapeInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/internationalization/UnnecessaryUnicodeEscapeInspection.java index 5d11c31823da..cf128c685384 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/internationalization/UnnecessaryUnicodeEscapeInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/internationalization/UnnecessaryUnicodeEscapeInspection.java @@ -37,7 +37,10 @@ import org.jetbrains.annotations.Nullable; import java.nio.ByteBuffer; import java.nio.CharBuffer; -import java.nio.charset.*; +import java.nio.charset.Charset; +import java.nio.charset.CharsetEncoder; +import java.nio.charset.CoderResult; +import java.nio.charset.CodingErrorAction; /** * @author Bas Leijdekkers @@ -146,7 +149,17 @@ public class UnnecessaryUnicodeEscapeInspection extends BaseInspection { StringUtil.isHexDigit(text.charAt(nextChar + 3))) { final int escapeEnd = nextChar + 4; final char d = (char)Integer.parseInt(text.substring(nextChar, escapeEnd), 16); - if (Character.isISOControl(d)) { + final int type = Character.getType(d); + if (type == Character.CONTROL || + type == Character.FORMAT || + type == Character.PRIVATE_USE || + type == Character.SURROGATE || + type == Character.UNASSIGNED || + type == Character.LINE_SEPARATOR || + type == Character.PARAGRAPH_SEPARATOR) { + continue; + } + if (type == Character.SPACE_SEPARATOR && d != ' ') { continue; } byteBuffer.clear(); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/internationalization/unnecessary_unicode_escape/UnnecessaryUnicodeEscape.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/internationalization/unnecessary_unicode_escape/UnnecessaryUnicodeEscape.java index 20f2ba7a1b19..2d1a715e1cf2 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/internationalization/unnecessary_unicode_escape/UnnecessaryUnicodeEscape.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/internationalization/unnecessary_unicode_escape/UnnecessaryUnicodeEscape.java @@ -5,6 +5,9 @@ class UnnecessaryUnicodeEscape { // control char & not representable char: \u0010 \u00e4 char[] surrogates = new char[]{'\ud800','\udc00'}; + + String t = "\u0020"; + String u = "\u200B\u200E\u00A0\u200F"; } @SuppressWarnings("UnnecessaryUnicodeEscape") class Suppress {