From abaca661ff4f0d60063b5244558d1676f03455b9 Mon Sep 17 00:00:00 2001 From: Zafar Khaja Date: Mon, 27 Jan 2014 14:09:47 +0400 Subject: [PATCH] Refactor VersionParser, make some improvements --- .../zafarkhaja/semver/VersionParser.java | 54 +++++++++---------- 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/github/zafarkhaja/semver/VersionParser.java b/src/main/java/com/github/zafarkhaja/semver/VersionParser.java index bbeb0d1..1911e61 100644 --- a/src/main/java/com/github/zafarkhaja/semver/VersionParser.java +++ b/src/main/java/com/github/zafarkhaja/semver/VersionParser.java @@ -224,18 +224,18 @@ class VersionParser implements Parser { * @return a valid version object */ private Version parseValidSemVer() { - NormalVersion normalVersion = parseVersionCore(); - MetadataVersion preReleaseVersion = MetadataVersion.NULL; - MetadataVersion buildMetadata = MetadataVersion.NULL; + NormalVersion normal = parseVersionCore(); + MetadataVersion preRelease = MetadataVersion.NULL; if (chars.positiveLookahead(HYPHEN)) { chars.consume(); - preReleaseVersion = parsePreRelease(); + preRelease = parsePreRelease(); } + MetadataVersion build = MetadataVersion.NULL; if (chars.positiveLookahead(PLUS)) { 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 { * @throws ParseException if the pre-release version has empty identifier(s) */ private MetadataVersion parsePreRelease() { + List idents = new ArrayList(); CharType end = closestEndpoint(PLUS, EOL); CharType before = closestEndpoint(DOT, end); - List idents = new ArrayList(); - while (!chars.positiveLookahead(end)) { - if (before == DOT) { - checkForEmptyIdentifier(); - } + do { + checkForEmptyIdentifier(); if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) { idents.add(alphanumericIdentifier()); } else { idents.add(numericIdentifier()); } 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()])); } @@ -316,23 +314,21 @@ class VersionParser implements Parser { * @throws ParseException if the build metadata has empty identifier(s) */ private MetadataVersion parseBuild() { + List idents = new ArrayList(); CharType end = EOL; CharType before = closestEndpoint(DOT, end); - List idents = new ArrayList(); - while (!chars.positiveLookahead(end)) { - if (before == DOT) { - checkForEmptyIdentifier(); - } + do { + checkForEmptyIdentifier(); if (chars.positiveLookaheadBefore(before, LETTER, HYPHEN)) { idents.add(alphanumericIdentifier()); } else { idents.add(digits()); } 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()])); } @@ -371,10 +367,9 @@ class VersionParser implements Parser { */ private String alphanumericIdentifier() { StringBuilder sb = new StringBuilder(); - sb.append(chars.consume(DIGIT, LETTER, HYPHEN)); - while (chars.positiveLookahead(DIGIT, LETTER, HYPHEN)) { - sb.append(chars.consume()); - } + do { + sb.append(chars.consume(DIGIT, LETTER, HYPHEN)); + } while (chars.positiveLookahead(DIGIT, LETTER, HYPHEN)); return sb.toString(); } @@ -392,10 +387,9 @@ class VersionParser implements Parser { */ private String digits() { StringBuilder sb = new StringBuilder(); - sb.append(chars.consume(DIGIT)); - while (chars.positiveLookahead(DIGIT)) { - sb.append(chars.consume()); - } + do { + sb.append(chars.consume(DIGIT)); + } while (chars.positiveLookahead(DIGIT)); return sb.toString(); }