Skip to content

Switch core API value types to noun-style accessors - #13036

Open
gnodet wants to merge 4 commits into
masterfrom
noun-accessors-core
Open

gnodet wants to merge 4 commits into
masterfrom
noun-accessors-core

Conversation

@gnodet

@gnodet gnodet commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Add noun-style accessors (record-accessor pattern) to core API interfaces for immutable value types, consistent with modern JDK conventions and existing Maven 4 API types (XmlNode, PathType, Lifecycle.Phase, etc.).

For each method, the noun-style accessor is now the primary abstract method. The existing getX() method is kept as a default delegating to it, annotated @Deprecated(since = "4.1.0", forRemoval = true).

Interfaces migrated: Artifact, ArtifactCoordinates, Dependency, DependencyCoordinates, DownloadedArtifact, Exclusion, Project, VersionConstraint, VersionRange.

24 files changed, 821 insertions, 212 deletions.

Fixes #13035

@gnodet gnodet added this to the 4.1.0 milestone Sep 3, 2026
@gnodet gnodet self-assigned this Sep 3, 2026
@gnodet
gnodet marked this pull request as draft September 3, 2026 21:38
@gnodet
gnodet force-pushed the noun-accessors-core branch from 46f6cdb to c0f25d3 Compare September 3, 2026 21:44
@gnodet
gnodet marked this pull request as ready for review September 3, 2026 22:30

@gnodet gnodet left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistent getGroupId() calls left unconverted

The migration is clean and mechanically consistent across 9 interfaces and all implementations. One minor gap: three getGroupId() calls in the factory request classes were missed while adjacent accessors on the same object were converted to noun-style.

This review was generated by an AI agent, Hermès, on behalf of @gnodet.

@gnodet gnodet left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review after e8c3ae3: the three getGroupId() calls flagged in the previous review are now converted to groupId(). Migration is mechanically consistent across all 9 interfaces, all implementations, all tests, and all internal callers. No remaining unconverted calls found.

LGTM — no issues.

This review was generated by an AI agent, Hermès, on behalf of @gnodet.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review after 9c98b45: migration of Node, Repository, RemoteRepository, LocalRepository to noun-style accessors is mechanically consistent — all 4 interfaces converted, all implementations (DefaultNode, WrapperNode, AbstractNode, DefaultLocalRepository, DefaultRemoteRepository, AbstractSession anonymous WorkspaceRepository, DefaultTransportProvider, DefaultModelBuilder) updated, all internal callers and tests updated. One Javadoc accuracy issue in the new commit.

This review was generated by an AI agent, Hermès, on behalf of @gnodet.

Comment thread api/maven-api-core/src/main/java/org/apache/maven/api/Node.java
Add noun-style accessors (record-accessor pattern) to core API
interfaces for immutable value types, consistent with modern JDK
conventions and existing Maven 4 API types (XmlNode, PathType,
Lifecycle.Phase, etc.).

For each method, the noun-style accessor is now the primary abstract
method. The existing getX() method is kept as a default delegating
to it, annotated @deprecated(since = "4.1.0", forRemoval = true).

Interfaces migrated: Artifact, ArtifactCoordinates, Dependency,
DependencyCoordinates, DownloadedArtifact, Exclusion, Project,
VersionConstraint, VersionRange.

Fixes #13035
@gnodet
gnodet force-pushed the noun-accessors-core branch from 9c98b45 to 45f2a08 Compare September 18, 2026 13:49

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review after 9c98b45: migration of Node, Repository, RemoteRepository, LocalRepository to noun-style accessors is mechanically consistent — all 4 interfaces converted, all implementations updated. One issue from the previous review is not addressed in this PR (claimed as fixed in #13153, but the Javadoc regression introduced by this PR remains).

This review was generated by an AI agent, Hermès, on behalf of @gnodet.

Comment thread api/maven-api-core/src/main/java/org/apache/maven/api/Node.java
Comment thread api/maven-api-core/src/main/java/org/apache/maven/api/LocalRepository.java Outdated

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review after f0701c6: the LocalRepository.getPath() annotation ordering nit is fixed (previous review addressed). One remaining inconsistency: the three @Nonnull deprecated wrappers in Node.java (getChildren, getRemoteRepositories, getRepository) still have @Nonnull before @Deprecated, opposite to the convention just enforced by this commit and to Artifact.java.

This review was generated by an AI agent, Hermès, on behalf of @gnodet.

Comment thread api/maven-api-core/src/main/java/org/apache/maven/api/Node.java
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Switch core API value types to noun-style accessors

2 participants