Call precomputed() on static CharMatcher instances.
Removes a noticeable hotspot from LabelValidator.validateTargetName().
--
MOS_MIGRATED_REVID=128359980
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
index f067ddb..5873b4d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/LabelExpander.java
@@ -63,7 +63,8 @@
CharMatcher.inRange('a', 'z')
.or(CharMatcher.inRange('A', 'Z'))
.or(CharMatcher.inRange('0', '9'))
- .or(CharMatcher.anyOf(":/_.-+" + PathFragment.SEPARATOR_CHAR));
+ .or(CharMatcher.anyOf(":/_.-+" + PathFragment.SEPARATOR_CHAR))
+ .precomputed();
/**
* Expands all references to labels embedded within a string using the
diff --git a/src/main/java/com/google/devtools/build/lib/cmdline/LabelValidator.java b/src/main/java/com/google/devtools/build/lib/cmdline/LabelValidator.java
index 42510c7..e9c0db3 100644
--- a/src/main/java/com/google/devtools/build/lib/cmdline/LabelValidator.java
+++ b/src/main/java/com/google/devtools/build/lib/cmdline/LabelValidator.java
@@ -48,7 +48,8 @@
private static final CharMatcher ALWAYS_ALLOWED_TARGET_CHARACTERS =
CharMatcher.javaLetterOrDigit()
.or(PUNCTUATION_REQUIRING_QUOTING)
- .or(PUNCTUATION_NOT_REQUIRING_QUOTING);
+ .or(PUNCTUATION_NOT_REQUIRING_QUOTING)
+ .precomputed();
@VisibleForTesting
static final String PACKAGE_NAME_ERROR =
diff --git a/src/main/java/com/google/devtools/build/lib/util/ShellEscaper.java b/src/main/java/com/google/devtools/build/lib/util/ShellEscaper.java
index 48d311f..0548d5f 100644
--- a/src/main/java/com/google/devtools/build/lib/util/ShellEscaper.java
+++ b/src/main/java/com/google/devtools/build/lib/util/ShellEscaper.java
@@ -62,7 +62,8 @@
CharMatcher.anyOf("@%-_+:,./")
.or(CharMatcher.inRange('0', '9')) // We can't use CharMatcher.javaLetterOrDigit(),
.or(CharMatcher.inRange('a', 'z')) // that would also accept non-ASCII digits and
- .or(CharMatcher.inRange('A', 'Z')); // letters.
+ .or(CharMatcher.inRange('A', 'Z')) // letters.
+ .precomputed();
/**
* Escapes a string by adding strong (single) quotes around it if necessary.