in compat/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/DefaultArtifactVersion.java [88:165]
public final void parseVersion(String version) {
comparable = new ComparableVersion(version);
int index = version.indexOf('-');
String part1;
String part2 = null;
if (index < 0) {
part1 = version;
} else {
part1 = version.substring(0, index);
part2 = version.substring(index + 1);
}
if (part2 != null) {
if (part2.length() == 1 || !part2.startsWith("0")) {
buildNumber = tryParseInt(part2);
if (buildNumber == null) {
qualifier = part2;
}
} else {
qualifier = part2;
}
}
if ((!part1.contains(".")) && !part1.startsWith("0")) {
majorVersion = tryParseInt(part1);
if (majorVersion == null) {
// qualifier is the whole version, including "-"
qualifier = version;
buildNumber = null;
}
} else {
boolean fallback = false;
String[] tok = part1.split("\\.");
int idx = 0;
if (idx < tok.length) {
majorVersion = getNextIntegerToken(tok[idx++]);
if (majorVersion == null) {
fallback = true;
}
} else {
fallback = true;
}
if (idx < tok.length) {
minorVersion = getNextIntegerToken(tok[idx++]);
if (minorVersion == null) {
fallback = true;
}
}
if (idx < tok.length) {
incrementalVersion = getNextIntegerToken(tok[idx++]);
if (incrementalVersion == null) {
fallback = true;
}
}
if (idx < tok.length) {
qualifier = tok[idx];
fallback = isDigits(qualifier);
}
// string tokenizer won't detect these and ignores them
if (part1.contains("..") || part1.startsWith(".") || part1.endsWith(".")) {
fallback = true;
}
if (fallback) {
// qualifier is the whole version, including "-"
qualifier = version;
majorVersion = null;
minorVersion = null;
incrementalVersion = null;
buildNumber = null;
}
}
}