in src/main/java/org/apache/sling/feature/maven/mojos/UpdateVersionsMojo.java [966:1020]
private static String alphaNumIncrement(String token) {
String newToken;
int i = token.length();
boolean done = false;
newToken = token;
while (!done && i > 0) {
i--;
char c = token.charAt(i);
if ('0' <= c && c < '9') {
c++;
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
done = true;
} else if (c == '9') {
c = '0';
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
} else if ('A' <= c && c < 'Z') {
c++;
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
done = true;
} else if (c == 'Z') {
c = 'A';
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
} else if ('a' <= c && c < 'z') {
c++;
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
done = true;
} else if (c == 'z') {
c = 'a';
newToken = newToken.substring(0, i) + c + (i + 1 < newToken.length() ? newToken.substring(i + 1) : "");
}
}
if (done) {
return newToken;
} else {
// ok this is roll-over time
boolean lastNumeric = false;
boolean lastAlpha = false;
boolean lastUpper = false;
i = token.length();
while (!lastAlpha && !lastNumeric && i > 0) {
i--;
char c = token.charAt(i);
lastAlpha = Character.isLetter(c);
lastUpper = c == Character.toUpperCase(c);
lastNumeric = Character.isDigit(c);
}
if (lastAlpha) {
if (lastUpper) {
return token + 'A';
}
return token + 'a';
}
return token + '0';
}
}