@@ -43,6 +43,11 @@ public class AppVersion implements Comparable<AppVersion> {
4343 */
4444 private String modifier ;
4545
46+ /**
47+ * The version's build, if any.
48+ */
49+ private String build ;
50+
4651 /**
4752 * Construct an uninitialized AppVersion.
4853 */
@@ -83,11 +88,16 @@ public AppVersion(int major, int minor, int patch, String modifier) {
8388 * <tt>1.0.1M1-SNAPSHOT</tt>.
8489 */
8590 public AppVersion (int major , int minor , int patch , int milestone , String modifier ) {
91+ this (major , minor , patch , milestone , modifier , null );
92+ }
93+
94+ public AppVersion (int major , int minor , int patch , int milestone , String modifier , String build ) {
8695 this .major = major ;
8796 this .minor = minor ;
8897 this .patch = patch ;
8998 this .milestone = milestone ;
9099 this .modifier = modifier ;
100+ this .build = build ;
91101 }
92102
93103 /**
@@ -264,6 +274,7 @@ public static AppVersion parse(String versionString) {
264274 int patchSeparator = versionString .indexOf ('.' , minorSeparator + 1 );
265275 int milestoneSeparator = versionString .indexOf ('M' , Math .max (minorSeparator , patchSeparator ));
266276 int modifierSeparator = versionString .indexOf ('-' , Math .max (minorSeparator , milestoneSeparator ));
277+ int buildSeparator = versionString .indexOf ('+' , Math .max (Math .max (minorSeparator , milestoneSeparator ), modifierSeparator ));
267278
268279 if (minorSeparator == -1 ) {
269280 throw new NumberFormatException ("Illegal version string: " + versionString );
@@ -272,21 +283,35 @@ public static AppVersion parse(String versionString) {
272283 final boolean hasPatch = patchSeparator > -1 ;
273284 final boolean hasMilestone = milestoneSeparator > -1 ;
274285 final boolean hasModifier = modifierSeparator > -1 ;
286+ final boolean hasBuild = buildSeparator > -1 ;
275287
276288 String major = versionString .substring (0 , minorSeparator );
277289 String minor = null ;
278290 String patch = null ;
279291 String milestone = null ;
280292 String modifier = null ;
293+ String build = null ;
294+
295+ if (hasBuild ) {
296+ build = versionString .substring (buildSeparator + 1 );
297+ }
281298
282299 if (hasModifier ) {
283- modifier = versionString .substring (modifierSeparator + 1 );
300+ if (hasBuild ) {
301+ modifier = versionString .substring (modifierSeparator + 1 , buildSeparator );
302+ }
303+ else {
304+ modifier = versionString .substring (modifierSeparator + 1 );
305+ }
284306 }
285307
286308 if (hasMilestone ) {
287309 if (hasModifier ) {
288310 milestone = versionString .substring (milestoneSeparator + 1 , modifierSeparator );
289311 }
312+ else if (hasBuild ) {
313+ milestone = versionString .substring (milestoneSeparator + 1 , buildSeparator );
314+ }
290315 else {
291316 milestone = versionString .substring (milestoneSeparator + 1 );
292317 }
@@ -300,6 +325,9 @@ public static AppVersion parse(String versionString) {
300325 else if (hasModifier ) {
301326 patch = versionString .substring (patchSeparator + 1 , modifierSeparator );
302327 }
328+ else if (hasBuild ) {
329+ patch = versionString .substring (patchSeparator + 1 , buildSeparator );
330+ }
303331 else {
304332 patch = versionString .substring (patchSeparator + 1 );
305333 }
@@ -312,6 +340,9 @@ else if (hasModifier) {
312340 else if (hasModifier ) {
313341 minor = versionString .substring (minorSeparator + 1 , modifierSeparator );
314342 }
343+ else if (hasBuild ) {
344+ minor = versionString .substring (minorSeparator + 1 , buildSeparator );
345+ }
315346 else {
316347 minor = versionString .substring (minorSeparator + 1 );
317348 }
@@ -322,7 +353,7 @@ else if (hasModifier) {
322353 int minorInt = Integer .parseInt (minor );
323354 int patchInt = patch == null ? -1 : Integer .parseInt (patch );
324355 int milestoneInt = milestone == null ? -1 : Integer .parseInt (milestone );
325- return new AppVersion (majorInt , minorInt , patchInt , milestoneInt , modifier );
356+ return new AppVersion (majorInt , minorInt , patchInt , milestoneInt , modifier , build );
326357 }
327358
328359 /**
@@ -351,6 +382,13 @@ public String toString() {
351382 sb .append (modifier );
352383 }
353384
385+ if (build != null ) {
386+ if (sb .length () > 0 ) {
387+ sb .append ('+' );
388+ }
389+ sb .append (build );
390+ }
391+
354392 return sb .toString ();
355393 }
356394}
0 commit comments