From 53e75eee8af6b78b56b029b5b074d637e31413d0 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 24 Dec 2025 04:13:49 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20Rule=20workspace?= =?UTF-8?q?=20name=20normalization?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 💡 What: Replaced `String.replaceAll("[.-]", "_")` with a pre-compiled Guava `CharMatcher`. 🎯 Why: `replaceAll` recompiles the regex pattern on every call, which is expensive in hot paths. 📊 Impact: Reduces overhead for name normalization, which scales with the number of dependencies. 🔬 Measurement: Verified with `bazel test //resolver:rule_test`. --- resolver/BUILD.bazel | 11 +++++++++++ .../google/devtools/bazel/workspace/maven/Rule.java | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/resolver/BUILD.bazel b/resolver/BUILD.bazel index 7809efd..ab6e5e6 100644 --- a/resolver/BUILD.bazel +++ b/resolver/BUILD.bazel @@ -553,6 +553,17 @@ java_test( ], ) +java_test( + name = "rule_test", + size = "small", + srcs = ["src/test/java/com/google/devtools/bazel/workspace/maven/RuleTest.java"], + test_class = "com.google.devtools.bazel.workspace.maven.RuleTest", + deps = [ + ":graph_resolver_lib", + "@mvn//junit/junit", + ], +) + java_test( name = "sources_locator_test", size = "small", diff --git a/resolver/src/main/java/com/google/devtools/bazel/workspace/maven/Rule.java b/resolver/src/main/java/com/google/devtools/bazel/workspace/maven/Rule.java index 07bd3d0..9006b49 100644 --- a/resolver/src/main/java/com/google/devtools/bazel/workspace/maven/Rule.java +++ b/resolver/src/main/java/com/google/devtools/bazel/workspace/maven/Rule.java @@ -14,6 +14,7 @@ package com.google.devtools.bazel.workspace.maven; +import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -35,6 +36,9 @@ public class Rule implements Comparable { private static final String DEFAULT_PACKAGING = "jar"; + // Pre-compiled matcher for performance optimization over String.replaceAll + private static final CharMatcher DOT_OR_DASH_MATCHER = CharMatcher.anyOf(".-"); + private final Artifact artifact; private final Set parents; private final Map> dependencies; @@ -66,7 +70,7 @@ static String generateFullName(String groupId, String artifactId, String version } private static String normalizedWorkspaceName(final String name) { - return name.replaceAll("[.-]", "_"); + return DOT_OR_DASH_MATCHER.replaceFrom(name, '_'); } private static String normalizeMavenName(final String name) {