diff --git a/impl/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java b/impl/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java
index b802e8a44c1f..20341479c6e2 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/internal/aether/TypeRegistryAdapter.java
@@ -18,6 +18,9 @@
*/
package org.apache.maven.internal.aether;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
import org.apache.maven.api.PathType;
import org.apache.maven.api.Type;
import org.apache.maven.api.services.TypeRegistry;
@@ -27,8 +30,14 @@
import static java.util.Objects.requireNonNull;
+/**
+ * Adapter between Maven {@link TypeRegistry} and Resolver {@link ArtifactTypeRegistry}.
+ *
+ * Results are cached per typeId since type definitions are immutable during a build.
+ */
class TypeRegistryAdapter implements ArtifactTypeRegistry {
private final TypeRegistry typeRegistry;
+ private final ConcurrentMap cache = new ConcurrentHashMap<>();
TypeRegistryAdapter(TypeRegistry typeRegistry) {
this.typeRegistry = requireNonNull(typeRegistry, "typeRegistry");
@@ -36,6 +45,10 @@ class TypeRegistryAdapter implements ArtifactTypeRegistry {
@Override
public ArtifactType get(String typeId) {
+ return cache.computeIfAbsent(typeId, this::doGet);
+ }
+
+ private ArtifactType doGet(String typeId) {
Type type = typeRegistry.require(typeId);
if (type instanceof ArtifactType artifactType) {
return artifactType;
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 43785dee1321..b6ac66cbb395 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -560,9 +560,8 @@ private List build(File pomFile, boolean recursive) {
File pom = r.getSource().getPath().toFile();
MavenProject project =
projectIndex.get(r.getEffectiveModel().getId());
- Path rootDirectory =
- rootLocator.findRoot(pom.getParentFile().toPath());
- project.setRootDirectory(rootDirectory);
+ project.setRootDirectory(
+ rootLocator.findRoot(pom.getParentFile().toPath()));
project.setFile(pom);
project.setExecutionRoot(pom.equals(pomFile));
initProject(project, r);
diff --git a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
index e0f7d1c6e65c..63c9e2a65430 100644
--- a/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
+++ b/impl/maven-core/src/main/java/org/apache/maven/project/MavenProject.java
@@ -1217,7 +1217,11 @@ public boolean equals(Object other) {
@Override
public int hashCode() {
- return Objects.hash(getGroupId(), getArtifactId(), getVersion());
+ // Inlined hash avoids Object[] varargs allocation from Objects.hash()
+ int result = 31 + Objects.hashCode(getGroupId());
+ result = 31 * result + Objects.hashCode(getArtifactId());
+ result = 31 * result + Objects.hashCode(getVersion());
+ return result;
}
public List getBuildExtensions() {
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/InternalSession.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/InternalSession.java
index ae0635e4b69d..ccfd3611463e 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/InternalSession.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/InternalSession.java
@@ -49,6 +49,9 @@
public interface InternalSession extends Session {
static InternalSession from(Session session) {
+ if (session instanceof InternalSession is) {
+ return is;
+ }
return cast(InternalSession.class, session, "session should be an " + InternalSession.class);
}
diff --git a/impl/maven-impl/src/main/java/org/apache/maven/impl/PropertiesAsMap.java b/impl/maven-impl/src/main/java/org/apache/maven/impl/PropertiesAsMap.java
index cf71951c0956..0e0bc1aad394 100644
--- a/impl/maven-impl/src/main/java/org/apache/maven/impl/PropertiesAsMap.java
+++ b/impl/maven-impl/src/main/java/org/apache/maven/impl/PropertiesAsMap.java
@@ -34,13 +34,14 @@ public PropertiesAsMap(Map