This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch maven-3.9.x
in repository https://gitbox.apache.org/repos/asf/maven.git
The following commit(s) were added to refs/heads/maven-3.9.x by this push:
new fbf6bdaf0 [MNG-7686] Speed up by replacing non-pattern #replaceAll()
with #replace() or precompiled patterns
fbf6bdaf0 is described below
commit fbf6bdaf01607a9b934d02b53a062e45539d6140
Author: Andrey Bruykhov <[email protected]>
AuthorDate: Tue Feb 7 17:28:03 2023 +0300
[MNG-7686] Speed up by replacing non-pattern #replaceAll() with #replace()
or precompiled patterns
This closes #984
---
.../maven/profiles/activation/JdkPrefixProfileActivator.java | 2 +-
.../apache/maven/project/AbstractMavenProjectTestCase.java | 6 +++---
.../org/apache/maven/project/ClasspathArtifactResolver.java | 5 +++--
.../java/org/apache/maven/project/TestProjectBuilder.java | 3 ++-
.../org/apache/maven/internal/MultilineMessageHelper.java | 5 ++++-
.../maven/plugin/PluginParameterExpressionEvaluator.java | 6 +-----
.../apache/maven/settings/DefaultMavenSettingsBuilder.java | 9 +++++----
.../apache/maven/project/AbstractMavenProjectTestCase.java | 6 +++---
.../src/main/java/org/apache/maven/cli/MavenCli.java | 4 +++-
.../model/profile/activation/JdkVersionProfileActivator.java | 11 ++++++++---
.../org/apache/maven/plugin/descriptor/PluginDescriptor.java | 5 ++++-
.../repository/internal/RemoteSnapshotMetadataTest.java | 7 +++++--
.../maven/settings/validation/DefaultSettingsValidator.java | 12 ++++++------
13 files changed, 48 insertions(+), 33 deletions(-)
diff --git
a/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
b/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
index 736f8fdd5..a1e9b9b88 100644
---
a/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
+++
b/maven-compat/src/main/java/org/apache/maven/profiles/activation/JdkPrefixProfileActivator.java
@@ -68,7 +68,7 @@ public class JdkPrefixProfileActivator extends
DetectedProfileActivator {
}
private String convertJdkToMavenVersion(String jdk) {
- return jdk.replaceAll("_", "-");
+ return jdk.replace("_", "-");
}
protected String getJdkVersion() {
diff --git
a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
index 02d4c300e..0d827eaa0 100644
---
a/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
+++
b/maven-compat/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
@@ -20,7 +20,6 @@ package org.apache.maven.project;
import java.io.File;
import java.io.FileNotFoundException;
-import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Arrays;
@@ -92,7 +91,8 @@ public abstract class AbstractMavenProjectTestCase extends
PlexusTestCase {
return markerFile.getAbsoluteFile().getParentFile();
}
- protected static File getFileForClasspathResource(String resource) throws
FileNotFoundException {
+ protected static File getFileForClasspathResource(String resource)
+ throws FileNotFoundException, URISyntaxException {
ClassLoader cloader = Thread.currentThread().getContextClassLoader();
URL resourceUrl = cloader.getResource(resource);
@@ -101,7 +101,7 @@ public abstract class AbstractMavenProjectTestCase extends
PlexusTestCase {
throw new FileNotFoundException("Unable to find: " + resource);
}
- return new File(URI.create(resourceUrl.toString().replaceAll(" ",
"%20")));
+ return new File(resourceUrl.toURI());
}
protected ArtifactRepository getLocalRepository() throws Exception {
diff --git
a/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
b/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
index 0cef04d77..4fdb7b0de 100644
---
a/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
+++
b/maven-compat/src/test/java/org/apache/maven/project/ClasspathArtifactResolver.java
@@ -19,6 +19,7 @@
package org.apache.maven.project;
import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -56,8 +57,8 @@ public class ClasspathArtifactResolver implements
ArtifactResolver {
artifact =
artifact.setFile(ProjectClasspathTest.getFileForClasspathResource(
ProjectClasspathTest.dir + "transitive-" + scope +
"-dep.xml"));
result.setArtifact(artifact);
- } catch (FileNotFoundException e) {
- throw new IllegalStateException("Missing test POM for " +
artifact);
+ } catch (FileNotFoundException | URISyntaxException e) {
+ throw new IllegalStateException("Missing test POM for " +
artifact, e);
}
} else {
result.addException(new ArtifactNotFoundException(artifact,
null));
diff --git
a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
index 79c8edc37..3403067a5 100644
---
a/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
+++
b/maven-compat/src/test/java/org/apache/maven/project/TestProjectBuilder.java
@@ -20,6 +20,7 @@ package org.apache.maven.project;
import java.io.File;
import java.io.FileNotFoundException;
+import java.net.URISyntaxException;
import java.util.Collections;
import org.apache.maven.artifact.Artifact;
@@ -38,7 +39,7 @@ public class TestProjectBuilder extends DefaultProjectBuilder
{
try {
artifact.setFile(ProjectClasspathTest.getFileForClasspathResource(
ProjectClasspathTest.dir + "transitive-" + scope +
"-dep.xml"));
- } catch (FileNotFoundException e) {
+ } catch (FileNotFoundException | URISyntaxException e) {
throw new IllegalStateException("Missing test POM for " +
artifact);
}
}
diff --git
a/maven-core/src/main/java/org/apache/maven/internal/MultilineMessageHelper.java
b/maven-core/src/main/java/org/apache/maven/internal/MultilineMessageHelper.java
index 0e52e4c61..9ff2d200e 100644
---
a/maven-core/src/main/java/org/apache/maven/internal/MultilineMessageHelper.java
+++
b/maven-core/src/main/java/org/apache/maven/internal/MultilineMessageHelper.java
@@ -20,6 +20,7 @@ package org.apache.maven.internal;
import java.util.ArrayList;
import java.util.List;
+import java.util.regex.Pattern;
/**
* Helper class to format multiline messages to the console
@@ -29,6 +30,8 @@ public class MultilineMessageHelper {
private static final int DEFAULT_MAX_SIZE = 65;
private static final char BOX_CHAR = '*';
+ private static final Pattern S_FILTER = Pattern.compile("\\s+");
+
public static String separatorLine() {
StringBuilder sb = new StringBuilder(DEFAULT_MAX_SIZE);
repeat(sb, '*', DEFAULT_MAX_SIZE);
@@ -47,7 +50,7 @@ public class MultilineMessageHelper {
// lines
for (String line : lines) {
sb.setLength(0);
- String[] words = line.split("\\s+");
+ String[] words = S_FILTER.split(line);
for (String word : words) {
if (sb.length() >= remainder - word.length() - (sb.length() >
0 ? 1 : 0)) {
repeat(sb, ' ', remainder - sb.length());
diff --git
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
index 4623c5166..dd62795e4 100644
---
a/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
+++
b/maven-core/src/main/java/org/apache/maven/plugin/PluginParameterExpressionEvaluator.java
@@ -173,11 +173,7 @@ public class PluginParameterExpressionEvaluator implements
TypeAwareExpressionEv
}
// Was not an expression
- if (expression.contains("$$")) {
- return expression.replaceAll("\\$\\$", "\\$");
- } else {
- return expression;
- }
+ return expression.replace("$$", "$");
}
MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor();
diff --git
a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
index 4361590d1..9b1254f50 100644
---
a/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
+++
b/maven-core/src/main/java/org/apache/maven/settings/DefaultMavenSettingsBuilder.java
@@ -112,11 +112,12 @@ public class DefaultMavenSettingsBuilder extends
AbstractLogEnabled implements M
basedir = System.getProperty("user.dir");
}
- basedir = basedir.replaceAll("\\\\", "/");
- basedir = basedir.replaceAll("\\$", "\\\\\\$");
+ basedir = basedir.replace("\\", "/");
+ basedir = basedir.replace("$", "\\$");
- path = pathPattern.replaceAll("\\$\\{" + basedirSysProp + "\\}",
basedir);
- path = path.replaceAll("\\\\", "/");
+ // basedirSysProp is non regexp and basedir too
+ path = pathPattern.replace("${" + basedirSysProp + "}", basedir);
+ path = path.replace("\\", "/");
//
---------------------------------------------------------------------------------
// I'm not sure if this last regexp was really intended to
disallow the usage of
// network paths as user.home directory. Unfortunately it did. I
removed it and
diff --git
a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
index 0b37a02bc..0ce4925c8 100644
---
a/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
+++
b/maven-core/src/test/java/org/apache/maven/project/AbstractMavenProjectTestCase.java
@@ -20,7 +20,6 @@ package org.apache.maven.project;
import java.io.File;
import java.io.FileNotFoundException;
-import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Arrays;
@@ -90,7 +89,8 @@ public abstract class AbstractMavenProjectTestCase extends
PlexusTestCase {
return markerFile.getAbsoluteFile().getParentFile();
}
- protected static File getFileForClasspathResource(String resource) throws
FileNotFoundException {
+ protected static File getFileForClasspathResource(String resource)
+ throws FileNotFoundException, URISyntaxException {
ClassLoader cloader = Thread.currentThread().getContextClassLoader();
URL resourceUrl = cloader.getResource(resource);
@@ -99,7 +99,7 @@ public abstract class AbstractMavenProjectTestCase extends
PlexusTestCase {
throw new FileNotFoundException("Unable to find: " + resource);
}
- return new File(URI.create(resourceUrl.toString().replaceAll(" ",
"%20")));
+ return new File(resourceUrl.toURI());
}
protected ArtifactRepository getLocalRepository() throws Exception {
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index 7824709c4..61b0e60f6 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -169,6 +169,8 @@ public class MavenCli {
private CLIManager cliManager;
+ private static final Pattern NEXT_LINE = Pattern.compile("\r?\n");
+
public MavenCli() {
this(null);
}
@@ -932,7 +934,7 @@ public class MavenCli {
}
}
- String[] lines = msg.split("(\r\n)|(\r)|(\n)");
+ String[] lines = NEXT_LINE.split(msg);
String currentColor = "";
for (int i = 0; i < lines.length; i++) {
diff --git
a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
index 33b41a41e..993241775 100644
---
a/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
+++
b/maven-model-builder/src/main/java/org/apache/maven/model/profile/activation/JdkVersionProfileActivator.java
@@ -24,6 +24,7 @@ import javax.inject.Singleton;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.regex.Pattern;
import org.apache.maven.model.Activation;
import org.apache.maven.model.Profile;
@@ -43,6 +44,10 @@ import
org.apache.maven.model.profile.ProfileActivationContext;
@Singleton
public class JdkVersionProfileActivator implements ProfileActivator {
+ private static final Pattern FILTER_1 = Pattern.compile("[^0-9._-]");
+ private static final Pattern FILTER_2 = Pattern.compile("[._-]");
+ private static final Pattern FILTER_3 = Pattern.compile("\\."); // used
for split now
+
@Override
public boolean isActive(Profile profile, ProfileActivationContext context,
ModelProblemCollector problems) {
Activation activation = profile.getActivation();
@@ -110,10 +115,10 @@ public class JdkVersionProfileActivator implements
ProfileActivator {
return isLeft ? 1 : -1;
}
- value = value.replaceAll("[^0-9\\.\\-\\_]", "");
+ value = FILTER_1.matcher(value).replaceAll("");
- List<String> valueTokens = new
ArrayList<>(Arrays.asList(value.split("[\\.\\-\\_]")));
- List<String> rangeValueTokens = new
ArrayList<>(Arrays.asList(rangeValue.value.split("\\.")));
+ List<String> valueTokens = new
ArrayList<>(Arrays.asList(FILTER_2.split(value)));
+ List<String> rangeValueTokens = new
ArrayList<>(Arrays.asList(FILTER_3.split(rangeValue.value)));
addZeroTokens(valueTokens, 3);
addZeroTokens(rangeValueTokens, 3);
diff --git
a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
index fdf683d66..e4f5cc493 100644
---
a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
+++
b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/PluginDescriptor.java
@@ -30,6 +30,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.regex.Pattern;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
@@ -49,6 +50,8 @@ public class PluginDescriptor extends ComponentSetDescriptor
implements Cloneabl
private static final String LIFECYCLE_DESCRIPTOR =
"META-INF/maven/lifecycle.xml";
+ private static final Pattern PATTERN_FILTER_1 =
Pattern.compile("-?(maven|plugin)-?");
+
private String groupId;
private String artifactId;
@@ -164,7 +167,7 @@ public class PluginDescriptor extends
ComponentSetDescriptor implements Cloneabl
if ("maven-plugin-plugin".equals(artifactId)) {
return "plugin";
} else {
- return artifactId.replaceAll("-?maven-?",
"").replaceAll("-?plugin-?", "");
+ return PATTERN_FILTER_1.matcher(artifactId).replaceAll("");
}
}
diff --git
a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
index 752a6b0c8..63473f5f5 100644
---
a/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
+++
b/maven-resolver-provider/src/test/java/org/apache/maven/repository/internal/RemoteSnapshotMetadataTest.java
@@ -25,6 +25,7 @@ import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
+import java.util.regex.Pattern;
import org.apache.maven.artifact.repository.metadata.Metadata;
import org.eclipse.aether.artifact.DefaultArtifact;
@@ -37,6 +38,8 @@ import static org.junit.Assert.assertTrue;
public class RemoteSnapshotMetadataTest {
private Locale defaultLocale;
+ private static final Pattern DATE_FILTER = Pattern.compile("\\..*");
+
@Before
public void setLocaleToUseBuddhistCalendar() {
defaultLocale = Locale.getDefault();
@@ -66,10 +69,10 @@ public class RemoteSnapshotMetadataTest {
String dateAfter = gregorianDate();
String ts =
metadata.metadata.getVersioning().getSnapshot().getTimestamp();
- String datePart = ts.replaceAll("\\..*", "");
+ String datePart = DATE_FILTER.matcher(ts).replaceAll("");
/* Allow for this test running across midnight */
- Set<String> expected = new HashSet<String>(Arrays.asList(dateBefore,
dateAfter));
+ Set<String> expected = new HashSet<>(Arrays.asList(dateBefore,
dateAfter));
assertTrue("Expected " + datePart + " to be in " + expected,
expected.contains(datePart));
}
}
diff --git
a/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
b/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
index 11ec66d61..3706775f7 100644
---
a/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
+++
b/maven-settings-builder/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
@@ -24,6 +24,7 @@ import javax.inject.Singleton;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.regex.Pattern;
import org.apache.maven.settings.Mirror;
import org.apache.maven.settings.Profile;
@@ -42,11 +43,10 @@ import org.codehaus.plexus.util.StringUtils;
@Singleton
public class DefaultSettingsValidator implements SettingsValidator {
- private static final String ID_REGEX = "[A-Za-z0-9_\\-.]+";
+ private static final String ID = "[\\w.-]+";
+ private static final Pattern ID_REGEX = Pattern.compile(ID);
- private static final String ILLEGAL_FS_CHARS = "\\/:\"<>|?*";
-
- private static final String ILLEGAL_REPO_ID_CHARS = ILLEGAL_FS_CHARS;
+ private static final String ILLEGAL_REPO_ID_CHARS = "\\/:\"<>|?*"; //
ILLEGAL_FS_CHARS
@Override
public void validate(Settings settings, SettingsProblemCollector problems)
{
@@ -63,13 +63,13 @@ public class DefaultSettingsValidator implements
SettingsValidator {
if (StringUtils.isBlank(pluginGroup)) {
addViolation(
problems, Severity.ERROR,
"pluginGroups.pluginGroup[" + i + "]", null, "must not be empty");
- } else if (!pluginGroup.matches(ID_REGEX)) {
+ } else if (!ID_REGEX.matcher(pluginGroup).matches()) {
addViolation(
problems,
Severity.ERROR,
"pluginGroups.pluginGroup[" + i + "]",
null,
- "must denote a valid group id and match the
pattern " + ID_REGEX);
+ "must denote a valid group id and match the
pattern " + ID);
}
}
}