Refactor VersionParser, make some improvements
This commit is contained in:
parent
371d100065
commit
abaca661ff
|
@ -224,18 +224,18 @@ class VersionParser implements Parser<Version> {
|
||||||
* @return a valid version object
|
* @return a valid version object
|
||||||
*/
|
*/
|
||||||
private Version parseValidSemVer() {
|
private Version parseValidSemVer() {
|
||||||
NormalVersion normalVersion = parseVersionCore();
|
NormalVersion normal = parseVersionCore();
|
||||||
MetadataVersion preReleaseVersion = MetadataVersion.NULL;
|
MetadataVersion preRelease = MetadataVersion.NULL;
|
||||||
MetadataVersion buildMetadata = MetadataVersion.NULL;
|
|
||||||
if (chars.positiveLookahead(HYPHEN)) {
|
if (chars.positiveLookahead(HYPHEN)) {
|
||||||
chars.consume();
|
chars.consume();
|
||||||
preReleaseVersion = parsePreRelease();
|
preRelease = parsePreRelease();
|
||||||
}
|
}
|
||||||
|
MetadataVersion build = MetadataVersion.NULL;
|
||||||
if (chars.positiveLookahead(PLUS)) {
|
if (chars.positiveLookahead(PLUS)) {
|
||||||
chars.consume();
|
chars.consume();
|
||||||
buildMetadata = parseBuild();
|
build = parseBuild();
|
||||||
}
|
}
|
||||||
return new Version(normalVersion, preReleaseVersion, buildMetadata);
|
return new Version(normal, preRelease, build);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -277,23 +277,21 @@ class VersionParser implements Parser<Version> {
|
||||||
* @throws ParseException if the pre-release version has empty identifier(s)
|
* @throws ParseException if the pre-release version has empty identifier(s)
|
||||||
*/
|
*/
|
||||||
private MetadataVersion parsePreRelease() {
|
private MetadataVersion parsePreRelease() {
|
||||||
|
List<String> idents = new ArrayList<String>();
|
||||||
CharType end = closestEndpoint(PLUS, EOL);
|
CharType end = closestEndpoint(PLUS, EOL);
|
||||||
CharType before = closestEndpoint(DOT, end);
|
CharType before = closestEndpoint(DOT, end);
|
||||||
List<String> idents = new ArrayList<String>();
|
do {
|
||||||
while (!chars.positiveLookahead(end)) {
|
checkForEmptyIdentifier();
|
||||||
if (before == DOT) {
|
|
||||||
checkForEmptyIdentifier();
|
|
||||||
}
|
|
||||||
if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) {
|
if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) {
|
||||||
idents.add(alphanumericIdentifier());
|
idents.add(alphanumericIdentifier());
|
||||||
} else {
|
} else {
|
||||||
idents.add(numericIdentifier());
|
idents.add(numericIdentifier());
|
||||||
}
|
}
|
||||||
if (before == DOT) {
|
if (before == DOT) {
|
||||||
chars.consume();
|
chars.consume(DOT);
|
||||||
|
before = closestEndpoint(DOT, end);
|
||||||
}
|
}
|
||||||
before = closestEndpoint(DOT, end);
|
} while (!chars.positiveLookahead(end));
|
||||||
}
|
|
||||||
return new MetadataVersion(idents.toArray(new String[idents.size()]));
|
return new MetadataVersion(idents.toArray(new String[idents.size()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,23 +314,21 @@ class VersionParser implements Parser<Version> {
|
||||||
* @throws ParseException if the build metadata has empty identifier(s)
|
* @throws ParseException if the build metadata has empty identifier(s)
|
||||||
*/
|
*/
|
||||||
private MetadataVersion parseBuild() {
|
private MetadataVersion parseBuild() {
|
||||||
|
List<String> idents = new ArrayList<String>();
|
||||||
CharType end = EOL;
|
CharType end = EOL;
|
||||||
CharType before = closestEndpoint(DOT, end);
|
CharType before = closestEndpoint(DOT, end);
|
||||||
List<String> idents = new ArrayList<String>();
|
do {
|
||||||
while (!chars.positiveLookahead(end)) {
|
checkForEmptyIdentifier();
|
||||||
if (before == DOT) {
|
|
||||||
checkForEmptyIdentifier();
|
|
||||||
}
|
|
||||||
if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) {
|
if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) {
|
||||||
idents.add(alphanumericIdentifier());
|
idents.add(alphanumericIdentifier());
|
||||||
} else {
|
} else {
|
||||||
idents.add(digits());
|
idents.add(digits());
|
||||||
}
|
}
|
||||||
if (before == DOT) {
|
if (before == DOT) {
|
||||||
chars.consume();
|
chars.consume(DOT);
|
||||||
|
before = closestEndpoint(DOT, end);
|
||||||
}
|
}
|
||||||
before = closestEndpoint(DOT, end);
|
} while (!chars.positiveLookahead(end));
|
||||||
}
|
|
||||||
return new MetadataVersion(idents.toArray(new String[idents.size()]));
|
return new MetadataVersion(idents.toArray(new String[idents.size()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -371,10 +367,9 @@ class VersionParser implements Parser<Version> {
|
||||||
*/
|
*/
|
||||||
private String alphanumericIdentifier() {
|
private String alphanumericIdentifier() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(chars.consume(DIGIT, LETTER, HYPHEN));
|
do {
|
||||||
while (chars.positiveLookahead(DIGIT, LETTER, HYPHEN)) {
|
sb.append(chars.consume(DIGIT, LETTER, HYPHEN));
|
||||||
sb.append(chars.consume());
|
} while (chars.positiveLookahead(DIGIT, LETTER, HYPHEN));
|
||||||
}
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,10 +387,9 @@ class VersionParser implements Parser<Version> {
|
||||||
*/
|
*/
|
||||||
private String digits() {
|
private String digits() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append(chars.consume(DIGIT));
|
do {
|
||||||
while (chars.positiveLookahead(DIGIT)) {
|
sb.append(chars.consume(DIGIT));
|
||||||
sb.append(chars.consume());
|
} while (chars.positiveLookahead(DIGIT));
|
||||||
}
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user