You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2025/02/07 00:45:08 UTC
(maven) 01/05: [MNG-8540] Add equals/hashCode to requests
This is an automated email from the ASF dual-hosted git repository.
gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git
commit c8e2af96a34e69995fb8399541959ea506f57f69
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Fri Jan 24 23:16:23 2025 +0100
[MNG-8540] Add equals/hashCode to requests
---
.../ArtifactCoordinatesFactoryRequest.java | 19 ++++++++++++
.../api/services/ArtifactDeployerRequest.java | 14 +++++++++
.../maven/api/services/ArtifactFactoryRequest.java | 18 +++++++++++
.../api/services/ArtifactInstallerRequest.java | 11 +++++++
.../api/services/ArtifactResolverRequest.java | 13 ++++++++
.../DependencyCoordinatesFactoryRequest.java | 31 +++++++++++++++++++
.../api/services/DependencyResolverRequest.java | 31 +++++++++++++++++++
.../maven/api/services/ModelBuilderRequest.java | 35 ++++++++++++++++++++++
.../maven/api/services/ProjectBuilderRequest.java | 17 +++++++++++
.../org/apache/maven/api/services/Request.java | 21 +++++++++++++
.../maven/api/services/SettingsBuilderRequest.java | 16 ++++++++++
.../api/services/ToolchainsBuilderRequest.java | 13 ++++++++
.../api/services/VersionRangeResolverRequest.java | 13 ++++++++
.../maven/api/services/VersionResolverRequest.java | 13 ++++++++
.../api/services/RequestImplementationTest.java | 35 ++++++++++++++++++++++
15 files changed, 300 insertions(+)
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
index 074c9bcebd..7a8361e9a3 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactCoordinatesFactoryRequest.java
@@ -18,6 +18,8 @@
*/
package org.apache.maven.api.services;
+import java.util.Objects;
+
import org.apache.maven.api.ArtifactCoordinates;
import org.apache.maven.api.Session;
import org.apache.maven.api.annotations.Experimental;
@@ -235,6 +237,23 @@ public String getCoordinatesString() {
return coordinatesString;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultArtifactFactoryRequestArtifact that
+ && Objects.equals(groupId, that.groupId)
+ && Objects.equals(artifactId, that.artifactId)
+ && Objects.equals(version, that.version)
+ && Objects.equals(classifier, that.classifier)
+ && Objects.equals(extension, that.extension)
+ && Objects.equals(type, that.type)
+ && Objects.equals(coordinatesString, that.coordinatesString);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(groupId, artifactId, version, classifier, extension, type, coordinatesString);
+ }
+
@Override
public String toString() {
return "ArtifactFactoryRequestArtifact[" + "groupId='"
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactDeployerRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactDeployerRequest.java
index c2eaedf58b..8d54d882c0 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactDeployerRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactDeployerRequest.java
@@ -20,6 +20,7 @@
import java.util.Collection;
import java.util.List;
+import java.util.Objects;
import org.apache.maven.api.ProducedArtifact;
import org.apache.maven.api.RemoteRepository;
@@ -144,6 +145,19 @@ public int getRetryFailedDeploymentCount() {
return retryFailedDeploymentCount;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultArtifactDeployerRequest that
+ && retryFailedDeploymentCount == that.retryFailedDeploymentCount
+ && Objects.equals(repository, that.repository)
+ && Objects.equals(artifacts, that.artifacts);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(repository, artifacts, retryFailedDeploymentCount);
+ }
+
@Override
public String toString() {
return "ArtifactDeployerRequest[" + "repository="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
index c162f42093..0d97922374 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactFactoryRequest.java
@@ -18,6 +18,8 @@
*/
package org.apache.maven.api.services;
+import java.util.Objects;
+
import org.apache.maven.api.Session;
import org.apache.maven.api.annotations.Experimental;
import org.apache.maven.api.annotations.Immutable;
@@ -198,6 +200,22 @@ public String getType() {
return type;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultArtifactFactoryRequest that
+ && Objects.equals(groupId, that.groupId)
+ && Objects.equals(artifactId, that.artifactId)
+ && Objects.equals(version, that.version)
+ && Objects.equals(classifier, that.classifier)
+ && Objects.equals(extension, that.extension)
+ && Objects.equals(type, that.type);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(groupId, artifactId, version, classifier, extension, type);
+ }
+
@Override
public String toString() {
return "ArtifactFactoryRequest[" + "groupId='"
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstallerRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstallerRequest.java
index 7c3130aced..6f5a57e0ea 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstallerRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactInstallerRequest.java
@@ -21,6 +21,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import org.apache.maven.api.ProducedArtifact;
import org.apache.maven.api.Session;
@@ -106,6 +107,16 @@ public Collection<ProducedArtifact> getArtifacts() {
return artifacts;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultArtifactInstallerRequest that && Objects.equals(artifacts, that.artifacts);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(artifacts);
+ }
+
@Override
public String toString() {
return "ArtifactInstallerRequest[" + "artifacts=" + artifacts + ']';
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
index 4651a07332..36336eae08 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ArtifactResolverRequest.java
@@ -20,6 +20,7 @@
import java.util.Collection;
import java.util.List;
+import java.util.Objects;
import org.apache.maven.api.ArtifactCoordinates;
import org.apache.maven.api.RemoteRepository;
@@ -141,6 +142,18 @@ public List<RemoteRepository> getRepositories() {
return repositories;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultArtifactResolverRequest that
+ && Objects.equals(coordinates, that.coordinates)
+ && Objects.equals(repositories, that.repositories);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(coordinates, repositories);
+ }
+
@Override
public String toString() {
return "ArtifactResolverRequest[" + "coordinates="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
index 5bcf124711..52a4204592 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyCoordinatesFactoryRequest.java
@@ -21,6 +21,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Objects;
import org.apache.maven.api.ArtifactCoordinates;
import org.apache.maven.api.Dependency;
@@ -301,6 +302,36 @@ public Collection<Exclusion> getExclusions() {
return exclusions;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultDependencyCoordinatesFactoryRequest that
+ && optional == that.optional
+ && Objects.equals(groupId, that.groupId)
+ && Objects.equals(artifactId, that.artifactId)
+ && Objects.equals(version, that.version)
+ && Objects.equals(classifier, that.classifier)
+ && Objects.equals(extension, that.extension)
+ && Objects.equals(type, that.type)
+ && Objects.equals(coordinateString, that.coordinateString)
+ && Objects.equals(scope, that.scope)
+ && Objects.equals(exclusions, that.exclusions);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ groupId,
+ artifactId,
+ version,
+ classifier,
+ extension,
+ type,
+ coordinateString,
+ scope,
+ optional,
+ exclusions);
+ }
+
@Override
public String toString() {
return "DependencyCoordinatesFactoryRequest[" + "groupId='"
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
index 532a9b6551..f419d7ff60 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/DependencyResolverRequest.java
@@ -22,6 +22,7 @@
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import java.util.function.Predicate;
@@ -499,6 +500,36 @@ public List<RemoteRepository> getRepositories() {
return repositories;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultDependencyResolverRequest that
+ && verbose == that.verbose
+ && requestType == that.requestType
+ && Objects.equals(project, that.project)
+ && Objects.equals(rootArtifact, that.rootArtifact)
+ && Objects.equals(root, that.root)
+ && Objects.equals(dependencies, that.dependencies)
+ && Objects.equals(managedDependencies, that.managedDependencies)
+ && Objects.equals(pathScope, that.pathScope)
+ && Objects.equals(pathTypeFilter, that.pathTypeFilter)
+ && Objects.equals(repositories, that.repositories);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ requestType,
+ project,
+ rootArtifact,
+ root,
+ dependencies,
+ managedDependencies,
+ verbose,
+ pathScope,
+ pathTypeFilter,
+ repositories);
+ }
+
@Override
public String toString() {
return "DependencyResolverRequest[" + "requestType="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ModelBuilderRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ModelBuilderRequest.java
index 882ba3861c..4a995e241d 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ModelBuilderRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ModelBuilderRequest.java
@@ -22,6 +22,7 @@
import java.util.Collection;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import org.apache.maven.api.RemoteRepository;
import org.apache.maven.api.Session;
@@ -402,6 +403,40 @@ public ModelTransformer getLifecycleBindingsInjector() {
return lifecycleBindingsInjector;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultModelBuilderRequest that
+ && locationTracking == that.locationTracking
+ && recursive == that.recursive
+ && requestType == that.requestType
+ && Objects.equals(source, that.source)
+ && Objects.equals(profiles, that.profiles)
+ && Objects.equals(activeProfileIds, that.activeProfileIds)
+ && Objects.equals(inactiveProfileIds, that.inactiveProfileIds)
+ && Objects.equals(systemProperties, that.systemProperties)
+ && Objects.equals(userProperties, that.userProperties)
+ && repositoryMerging == that.repositoryMerging
+ && Objects.equals(repositories, that.repositories)
+ && Objects.equals(lifecycleBindingsInjector, that.lifecycleBindingsInjector);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ requestType,
+ locationTracking,
+ recursive,
+ source,
+ profiles,
+ activeProfileIds,
+ inactiveProfileIds,
+ systemProperties,
+ userProperties,
+ repositoryMerging,
+ repositories,
+ lifecycleBindingsInjector);
+ }
+
@Override
public String toString() {
return "ModelBuilderRequest[" + "requestType="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectBuilderRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectBuilderRequest.java
index e0e9eee5b5..505098468c 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectBuilderRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ProjectBuilderRequest.java
@@ -20,6 +20,7 @@
import java.nio.file.Path;
import java.util.List;
+import java.util.Objects;
import java.util.Optional;
import org.apache.maven.api.RemoteRepository;
@@ -188,6 +189,22 @@ public List<RemoteRepository> getRepositories() {
return repositories;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultProjectBuilderRequest that
+ && allowStubModel == that.allowStubModel
+ && recursive == that.recursive
+ && processPlugins == that.processPlugins
+ && Objects.equals(path, that.path)
+ && Objects.equals(source, that.source)
+ && Objects.equals(repositories, that.repositories);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(path, source, allowStubModel, recursive, processPlugins, repositories);
+ }
+
@Override
public String toString() {
return "ProjectBuilderRequest[" + "path="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/Request.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/Request.java
index 28eecc94d8..b65d4a2d34 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/Request.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/Request.java
@@ -78,6 +78,27 @@ public interface Request<S extends ProtoSession> {
@Nullable
RequestTrace getTrace();
+ /**
+ * Returns a hashcode value for this request, based on all significant fields.
+ * Implementations must ensure that if two requests are equal according to
+ * {@link #equals(Object)}, they have the same hashcode.
+ *
+ * @return a hash code value for this request
+ */
+ @Override
+ int hashCode();
+
+ /**
+ * Returns {@code true} if the specified object is equal to this request.
+ * Two requests are considered equal if they have the same type and all
+ * significant fields are equal.
+ *
+ * @param obj the object to compare with this request
+ * @return {@code true} if the objects are equal, {@code false} otherwise
+ */
+ @Override
+ boolean equals(Object obj);
+
/**
* Returns a string representation of this request, used for debugging and logging purposes.
* The format should include the request type and any significant attributes that define the
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/SettingsBuilderRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/SettingsBuilderRequest.java
index a310bb8c18..1ab8a9a15b 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/SettingsBuilderRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/SettingsBuilderRequest.java
@@ -20,6 +20,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Objects;
import java.util.Optional;
import java.util.function.UnaryOperator;
@@ -222,6 +223,21 @@ public Optional<UnaryOperator<String>> getInterpolationSource() {
return Optional.ofNullable(interpolationSource);
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultSettingsBuilderRequest that
+ && Objects.equals(installationSettingsSource, that.installationSettingsSource)
+ && Objects.equals(projectSettingsSource, that.projectSettingsSource)
+ && Objects.equals(userSettingsSource, that.userSettingsSource)
+ && Objects.equals(interpolationSource, that.interpolationSource);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(
+ installationSettingsSource, projectSettingsSource, userSettingsSource, interpolationSource);
+ }
+
@Override
public String toString() {
return "SettingsBuilderRequest[" + "installationSettingsSource="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ToolchainsBuilderRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ToolchainsBuilderRequest.java
index 1af9a50dad..0257ae6760 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/ToolchainsBuilderRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/ToolchainsBuilderRequest.java
@@ -20,6 +20,7 @@
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Objects;
import java.util.Optional;
import org.apache.maven.api.ProtoSession;
@@ -148,6 +149,18 @@ public Optional<Source> getUserToolchainsSource() {
return Optional.ofNullable(userToolchainsSource);
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultToolchainsBuilderRequest that
+ && Objects.equals(installationToolchainsSource, that.installationToolchainsSource)
+ && Objects.equals(userToolchainsSource, that.userToolchainsSource);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(installationToolchainsSource, userToolchainsSource);
+ }
+
@Override
public String toString() {
return "ToolchainsBuilderRequest[" + "installationToolchainsSource="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
index 3ab8a89b1e..52abe9e89a 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionRangeResolverRequest.java
@@ -19,6 +19,7 @@
package org.apache.maven.api.services;
import java.util.List;
+import java.util.Objects;
import org.apache.maven.api.ArtifactCoordinates;
import org.apache.maven.api.RemoteRepository;
@@ -125,6 +126,18 @@ public List<RemoteRepository> getRepositories() {
return repositories;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultVersionResolverRequest that
+ && Objects.equals(artifactCoordinates, that.artifactCoordinates)
+ && Objects.equals(repositories, that.repositories);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(artifactCoordinates, repositories);
+ }
+
@Override
public String toString() {
return "VersionResolverRequest[" + "artifactCoordinates="
diff --git a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
index f2751d0c0c..c8dee58a8f 100644
--- a/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
+++ b/api/maven-api-core/src/main/java/org/apache/maven/api/services/VersionResolverRequest.java
@@ -19,6 +19,7 @@
package org.apache.maven.api.services;
import java.util.List;
+import java.util.Objects;
import org.apache.maven.api.ArtifactCoordinates;
import org.apache.maven.api.RemoteRepository;
@@ -127,6 +128,18 @@ public List<RemoteRepository> getRepositories() {
return repositories;
}
+ @Override
+ public boolean equals(Object o) {
+ return o instanceof DefaultVersionResolverRequest that
+ && Objects.equals(artifactCoordinates, that.artifactCoordinates)
+ && Objects.equals(repositories, that.repositories);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(artifactCoordinates, repositories);
+ }
+
@Override
public String toString() {
return "VersionResolverRequest[" + "artifactCoordinates="
diff --git a/api/maven-api-core/src/test/java/org/apache/maven/api/services/RequestImplementationTest.java b/api/maven-api-core/src/test/java/org/apache/maven/api/services/RequestImplementationTest.java
index 61dc77c2e9..b618a100ca 100644
--- a/api/maven-api-core/src/test/java/org/apache/maven/api/services/RequestImplementationTest.java
+++ b/api/maven-api-core/src/test/java/org/apache/maven/api/services/RequestImplementationTest.java
@@ -22,6 +22,7 @@
import java.util.List;
import org.apache.maven.api.ArtifactCoordinates;
+import org.apache.maven.api.PathScope;
import org.apache.maven.api.RemoteRepository;
import org.apache.maven.api.Session;
import org.junit.jupiter.api.Test;
@@ -59,6 +60,11 @@ void testArtifactResolverRequestEquality() {
.repositories(repositories1)
.build();
+ // Test equals and hashCode
+ assertEquals(request1, request2);
+ assertEquals(request1.hashCode(), request2.hashCode());
+ assertNotEquals(request1, request3);
+
// Test toString
String toString = request1.toString();
assertTrue(toString.contains("coordinates="));
@@ -76,4 +82,33 @@ void testRequestTraceIntegration() {
assertEquals(trace, request.getTrace());
assertEquals(session, request.getSession());
}
+
+ @Test
+ void testDependencyResolverRequestEquality() {
+ Session session = mock(Session.class);
+
+ DependencyResolverRequest.DependencyResolverRequestBuilder builder = DependencyResolverRequest.builder();
+ DependencyResolverRequest request1 = builder.session(session)
+ .requestType(DependencyResolverRequest.RequestType.COLLECT)
+ .pathScope(PathScope.MAIN_COMPILE)
+ .build();
+
+ DependencyResolverRequest request2 = builder.session(session)
+ .requestType(DependencyResolverRequest.RequestType.COLLECT)
+ .pathScope(PathScope.MAIN_COMPILE)
+ .build();
+
+ DependencyResolverRequest request3 = builder.session(session)
+ .requestType(DependencyResolverRequest.RequestType.RESOLVE)
+ .pathScope(PathScope.MAIN_COMPILE)
+ .build();
+
+ assertEquals(request1, request2);
+ assertEquals(request1.hashCode(), request2.hashCode());
+ assertNotEquals(request1, request3);
+
+ String toString = request1.toString();
+ assertTrue(toString.contains("requestType="));
+ assertTrue(toString.contains("pathScope="));
+ }
}