Skip to content

Commit 2ec8719

Browse files
committed
Refactor SemVer class: change access modifiers and simplify version parsing tests
Signed-off-by: Harsh Mehta <harshmehta010102@gmail.com>
1 parent 74f9ce9 commit 2ec8719

File tree

3 files changed

+107
-210
lines changed

3 files changed

+107
-210
lines changed

maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/AbstractSemVerVersionPolicy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ protected VersionPolicyResult createResult(SemVer version) {
4343
}
4444

4545
protected VersionPolicyResult createSnapshotResult(SemVer version) {
46-
return new VersionPolicyResult().setVersion(version.toString() + "-SNAPSHOT");
46+
return new VersionPolicyResult().setVersion(version.toSnapshotVersion().toString());
4747
}
4848
}

maven-release-policies/maven-release-semver-policy/src/main/java/org/apache/maven/shared/release/policy/semver/SemVer.java

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
*
3232
* @see <a href="https://semver.org/">Semantic Versioning 2.0.0</a>
3333
*/
34-
public class SemVer {
34+
class SemVer {
3535

3636
/**
3737
* Regex pattern for parsing semantic versions from semver.org.
@@ -67,7 +67,7 @@ public enum Element {
6767
* @param preRelease the pre-release identifier (can be null)
6868
* @param metadata the build metadata (can be null)
6969
*/
70-
public SemVer(int major, int minor, int patch, String preRelease, String metadata) {
70+
protected SemVer(int major, int minor, int patch, String preRelease, String metadata) {
7171
if (major < 0 || minor < 0 || patch < 0) {
7272
throw new IllegalArgumentException("Version numbers must be non-negative");
7373
}
@@ -85,7 +85,7 @@ public SemVer(int major, int minor, int patch, String preRelease, String metadat
8585
* @return the parsed SemVer object
8686
* @throws IllegalArgumentException if the version string is invalid
8787
*/
88-
public static SemVer parse(String version) {
88+
static SemVer parse(String version) {
8989
if (version == null || version.trim().isEmpty()) {
9090
throw new IllegalArgumentException("Version string cannot be null or empty");
9191
}
@@ -116,7 +116,7 @@ public static SemVer parse(String version) {
116116
*
117117
* @return a new SemVer representing the release version
118118
*/
119-
public SemVer toReleaseVersion() {
119+
SemVer toReleaseVersion() {
120120
return new SemVer(major, minor, patch, null, null);
121121
}
122122

@@ -133,9 +133,12 @@ public SemVer toReleaseVersion() {
133133
* <li>1.2.3-SNAPSHOT → 1.2.3-SNAPSHOT (no change)</li>
134134
* </ul>
135135
*
136-
* @return a new SemVer with SNAPSHOT pre-release identifier
136+
* @return a new SemVer with SNAPSHOT pre-release identifier, or this instance if already a SNAPSHOT version
137137
*/
138-
public SemVer toSnapshotVersion() {
138+
SemVer toSnapshotVersion() {
139+
if ("SNAPSHOT".equals(preRelease) && metadata == null) {
140+
return this;
141+
}
139142
return new SemVer(major, minor, patch, "SNAPSHOT", null);
140143
}
141144

@@ -148,7 +151,7 @@ public SemVer toSnapshotVersion() {
148151
* @param element the element to increment (MAJOR, MINOR, or PATCH)
149152
* @return a new SemVer with the specified element incremented (or release version if pre-release/metadata present)
150153
*/
151-
public SemVer next(Element element) {
154+
SemVer next(Element element) {
152155
Objects.requireNonNull(element, "Element cannot be null");
153156

154157
// If version has pre-release or metadata, just return release version without incrementing
@@ -173,7 +176,7 @@ public SemVer next(Element element) {
173176
*
174177
* @return true if pre-release identifier is present, false otherwise
175178
*/
176-
public boolean hasPreRelease() {
179+
private boolean hasPreRelease() {
177180
return preRelease != null && !preRelease.isEmpty();
178181
}
179182

@@ -182,7 +185,7 @@ public boolean hasPreRelease() {
182185
*
183186
* @return true if build metadata is present, false otherwise
184187
*/
185-
public boolean hasMetadata() {
188+
private boolean hasMetadata() {
186189
return metadata != null && !metadata.isEmpty();
187190
}
188191

@@ -191,7 +194,7 @@ public boolean hasMetadata() {
191194
*
192195
* @return the major version
193196
*/
194-
public int getMajor() {
197+
int getMajor() {
195198
return major;
196199
}
197200

@@ -200,7 +203,7 @@ public int getMajor() {
200203
*
201204
* @return the minor version
202205
*/
203-
public int getMinor() {
206+
int getMinor() {
204207
return minor;
205208
}
206209

@@ -209,7 +212,7 @@ public int getMinor() {
209212
*
210213
* @return the patch version
211214
*/
212-
public int getPatch() {
215+
int getPatch() {
213216
return patch;
214217
}
215218

@@ -218,7 +221,7 @@ public int getPatch() {
218221
*
219222
* @return the pre-release identifier, or null if not present
220223
*/
221-
public String getPreRelease() {
224+
String getPreRelease() {
222225
return preRelease;
223226
}
224227

@@ -227,7 +230,7 @@ public String getPreRelease() {
227230
*
228231
* @return the build metadata, or null if not present
229232
*/
230-
public String getMetadata() {
233+
String getMetadata() {
231234
return metadata;
232235
}
233236

@@ -246,25 +249,4 @@ public String toString() {
246249

247250
return sb.toString();
248251
}
249-
250-
@Override
251-
public boolean equals(Object o) {
252-
if (this == o) {
253-
return true;
254-
}
255-
if (o == null || getClass() != o.getClass()) {
256-
return false;
257-
}
258-
SemVer semVer = (SemVer) o;
259-
return major == semVer.major
260-
&& minor == semVer.minor
261-
&& patch == semVer.patch
262-
&& Objects.equals(preRelease, semVer.preRelease)
263-
&& Objects.equals(metadata, semVer.metadata);
264-
}
265-
266-
@Override
267-
public int hashCode() {
268-
return Objects.hash(major, minor, patch, preRelease, metadata);
269-
}
270252
}

0 commit comments

Comments
 (0)