private SuffixedVersion parseVersion(Matcher versionMatcher, String version, String parseSuffix) throws NumberFormatException, IllegalArgumentException { if (!versionMatcher.matches()) { throw new IllegalArgumentException("Version " + version + "is unparsable"); } String majorString = versionMatcher.group("major"); String minorString = versionMatcher.group("minor"); String microString = versionMatcher.group("micro"); String qualifierString = versionMatcher.group("qualifier"); String suffixVersionString = versionMatcher.group("suffixversion"); int major = parseNumberString(majorString); int minor = parseNumberString(minorString); int micro = parseNumberString(microString); String qualifier = qualifierString == null ? "" : qualifierString; if (suffixVersionString == null) { return new SuffixedVersion(major, minor, micro, qualifier, version); } else { int suffixVersion = Integer.parseInt(suffixVersionString); return new SuffixedVersion(major, minor, micro, qualifier, parseSuffix, suffixVersion, version); } }