From 359c773d8bffa2caba25cdaf2561ede71fe90736 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Sat, 16 Sep 2017 10:28:49 +0200 Subject: [PATCH] Do not use String.replace() This forces a Pattern compilation, which we do not really want. Pre-compile the patterns instead. Change-Id: Ibcb9f911f4a4089f375264b75ce2f5d9c5f46447 Signed-off-by: Robert Varga --- .../yangtools/yang/parser/stmt/rfc6020/Utils.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java index 55238de888..8597afca6c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/Utils.java @@ -59,6 +59,10 @@ public final class Utils { private static final String YANG_XPATH_FUNCTIONS_STRING = "(re-match|deref|derived-from(-or-self)?|enum-value|bit-is-set)(\\()"; private static final Pattern YANG_XPATH_FUNCTIONS_PATTERN = Pattern.compile(YANG_XPATH_FUNCTIONS_STRING); + private static final Pattern ESCAPED_DQUOT = Pattern.compile("\\\"", Pattern.LITERAL); + private static final Pattern ESCAPED_BACKSLASH = Pattern.compile("\\\\", Pattern.LITERAL); + private static final Pattern ESCAPED_LF = Pattern.compile("\\n", Pattern.LITERAL); + private static final Pattern ESCAPED_TAB = Pattern.compile("\\t", Pattern.LITERAL); private static final ThreadLocal XPATH_FACTORY = new ThreadLocal() { @Override @@ -217,8 +221,13 @@ public final class Utils { * in the inner string and trim the result. */ checkDoubleQuotedString(innerStr, yangVersion, ref); - sb.append(innerStr.replace("\\\"", "\"").replace("\\\\", "\\").replace("\\n", "\n") - .replace("\\t", "\t")); + sb.append(ESCAPED_TAB.matcher( + ESCAPED_LF.matcher( + ESCAPED_BACKSLASH.matcher( + ESCAPED_DQUOT.matcher(innerStr).replaceAll("\\\"")) + .replaceAll("\\\\")) + .replaceAll("\\\n")) + .replaceAll("\\\t")); } else if (firstChar == '\'' && lastChar == '\'') { /* * According to RFC6020 a single quote character cannot occur in -- 2.36.6