You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2018/11/01 14:58:16 UTC

groovy git commit: Avoid compiling regex pattern repeatedly for better performance

Repository: groovy
Updated Branches:
  refs/heads/master c6c375334 -> 72c7c2ea1


Avoid compiling regex pattern repeatedly for better performance


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/72c7c2ea
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/72c7c2ea
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/72c7c2ea

Branch: refs/heads/master
Commit: 72c7c2ea10f7b08b5208db2ce7b4123398adce8a
Parents: c6c3753
Author: Daniel Sun <su...@apache.org>
Authored: Thu Nov 1 22:56:38 2018 +0800
Committer: Daniel Sun <su...@apache.org>
Committed: Thu Nov 1 22:57:54 2018 +0800

----------------------------------------------------------------------
 .../groovy/parser/antlr4/util/StringUtils.java   | 19 +++++++++----------
 1 file changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/72c7c2ea/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
index b674734..93e10e2 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
@@ -30,14 +30,17 @@ import java.util.regex.Pattern;
  */
 public class StringUtils {
 	private static final String BACKSLASH = "\\";
+	private static final Pattern HEX_ESCAPES_PATTERN = Pattern.compile("(\\\\*)\\\\u([0-9abcdefABCDEF]{4})");
+	private static final Pattern OCTAL_ESCAPES_PATTERN = Pattern.compile("(\\\\*)\\\\([0-3]?[0-7]?[0-7])");
+	private static final Pattern STANDARD_ESCAPES_PATTERN = Pattern.compile("(\\\\*)\\\\([btnfr\"'])");
+	private static final Pattern LINE_ESCAPE_PATTERN = Pattern.compile("(\\\\*)\\\\\r?\n");
 
 	public static String replaceHexEscapes(String text) {
 		if (!text.contains(BACKSLASH)) {
 			return text;
 		}
 
-		Pattern p = Pattern.compile("(\\\\*)\\\\u([0-9abcdefABCDEF]{4})");
-		return StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
+		return StringGroovyMethods.replaceAll((CharSequence) text, HEX_ESCAPES_PATTERN, new Closure<Void>(null, null) {
 			Object doCall(String _0, String _1, String _2) {
 				if (isLengthOdd(_1)) {
 					return _0;
@@ -53,8 +56,7 @@ public class StringUtils {
 			return text;
 		}
 
-		Pattern p = Pattern.compile("(\\\\*)\\\\([0-3]?[0-7]?[0-7])");
-		return StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
+		return StringGroovyMethods.replaceAll((CharSequence) text, OCTAL_ESCAPES_PATTERN, new Closure<Void>(null, null) {
 			Object doCall(String _0, String _1, String _2) {
 				if (isLengthOdd(_1)) {
 					return _0;
@@ -78,9 +80,7 @@ public class StringUtils {
 			return text;
 		}
 
-		Pattern p = Pattern.compile("(\\\\*)\\\\([btnfr\"'])");
-
-		String result = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
+		String result = StringGroovyMethods.replaceAll((CharSequence) text, STANDARD_ESCAPES_PATTERN, new Closure<Void>(null, null) {
 			Object doCall(String _0, String _1, String _2) {
 				if (isLengthOdd(_1)) {
 					return _0;
@@ -138,8 +138,7 @@ public class StringUtils {
 			return text;
 		}
 
-		Pattern p = Pattern.compile("(\\\\*)\\\\\r?\n");
-		text = StringGroovyMethods.replaceAll((CharSequence) text, p, new Closure<Void>(null, null) {
+		text = StringGroovyMethods.replaceAll((CharSequence) text, LINE_ESCAPE_PATTERN, new Closure<Void>(null, null) {
 			Object doCall(String _0, String _1) {
 				if (isLengthOdd(_1)) {
 					return _0;
@@ -208,7 +207,7 @@ public class StringUtils {
 		increase = (increase < 0 ? 0 : increase) * 16;
 		final StringBuilder buf = new StringBuilder(text.length() + increase);
 		while (end != INDEX_NOT_FOUND) {
-			buf.append(text.substring(start, end)).append(replacement);
+			buf.append(text, start, end).append(replacement);
 			start = end + replLength;
 			end = text.indexOf(searchString, start);
 		}