/** Returns a new version based on raw numbers * * @lucene.internal */ public static Version fromBits(int major, int minor, int bugfix) { return new Version(major, minor, bugfix); }
private Version(int major, int minor, int bugfix, int prerelease) { this.major = major; this.minor = minor; this.bugfix = bugfix; this.prerelease = prerelease; // NOTE: do not enforce major version so we remain future proof, except to // make sure it fits in the 8 bits we encode it into: if (major > 255 || major < 0) { throw new IllegalArgumentException("Illegal major version: " + major); } if (minor > 255 || minor < 0) { throw new IllegalArgumentException("Illegal minor version: " + minor); } if (bugfix > 255 || bugfix < 0) { throw new IllegalArgumentException("Illegal bugfix version: " + bugfix); } if (prerelease > 2 || prerelease < 0) { throw new IllegalArgumentException("Illegal prerelease version: " + prerelease); } if (prerelease != 0 && (minor != 0 || bugfix != 0)) { throw new IllegalArgumentException( "Prerelease version only supported with major release (got prerelease: " + prerelease + ", minor: " + minor + ", bugfix: " + bugfix + ")"); } encodedValue = major << 18 | minor << 10 | bugfix << 2 | prerelease; assert encodedIsValid(); }
/** * Parse the given version number as a constant or dot based version. * <p>This method allows to use {@code "SENTRY_X_Y"} constant names, * or version numbers in the format {@code "x.y.z"}. * * @lucene.internal */ public static Version parseLeniently(String version) throws ParseException { String versionOrig = version; version = version.toUpperCase(Locale.ROOT); switch (version) { default: version = version .replaceFirst("^SENTRY_(\\d+)_(\\d+)_(\\d+)$", "$1.$2.$3") .replaceFirst("^SENTRY_(\\d+)_(\\d+)$", "$1.$2.0") .replaceFirst("^SENTRY_(\\d)(\\d)$", "$1.$2.0"); try { return parse(version); } catch (ParseException pe) { ParseException pe2 = new ParseException( "failed to parse lenient version string \"" + versionOrig + "\": " + pe.getMessage(), 0); pe2.initCause(pe); throw pe2; } } }
return new Version(major, minor, bugfix, prerelease); } catch (IllegalArgumentException iae) { ParseException pe = new ParseException("failed to parse version string \"" + version +