diff options
Diffstat (limited to 'platform/util/src/com/intellij/openapi/util/BuildNumber.java')
-rw-r--r-- | platform/util/src/com/intellij/openapi/util/BuildNumber.java | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java index a888db7becf9..22cf77504a63 100644 --- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java +++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java @@ -38,22 +38,28 @@ public class BuildNumber implements Comparable<BuildNumber> { private final String myProductCode; private final int myBaselineVersion; private final int myBuildNumber; + private final String myAttemptInfo; public BuildNumber(String productCode, int baselineVersion, int buildNumber) { + this(productCode, baselineVersion, buildNumber, null); + } + + public BuildNumber(String productCode, int baselineVersion, int buildNumber, String attemptInfo) { myProductCode = productCode; myBaselineVersion = baselineVersion; myBuildNumber = buildNumber; + myAttemptInfo = StringUtil.isEmpty(attemptInfo) ? null : attemptInfo; } public String asString() { - return asString(true); + return asString(true, false); } public String asStringWithoutProductCode() { - return asString(false); + return asString(false, false); } - private String asString(boolean includeProductCode) { + private String asString(boolean includeProductCode, boolean withBuildAttempt) { StringBuilder builder = new StringBuilder(); if (includeProductCode && !StringUtil.isEmpty(myProductCode)) { @@ -69,6 +75,10 @@ public class BuildNumber implements Comparable<BuildNumber> { builder.append(SNAPSHOT); } + if (withBuildAttempt && myAttemptInfo != null) { + builder.append('.').append(myAttemptInfo); + } + return builder.toString(); } @@ -98,9 +108,11 @@ public class BuildNumber implements Comparable<BuildNumber> { int baselineVersionSeparator = code.indexOf('.'); int baselineVersion; int buildNumber; + String attemptInfo = null; + if (baselineVersionSeparator > 0) { try { - final String baselineVersionString = code.substring(0, baselineVersionSeparator); + String baselineVersionString = code.substring(0, baselineVersionSeparator); if (baselineVersionString.trim().isEmpty()) return null; baselineVersion = Integer.parseInt(baselineVersionString); code = code.substring(baselineVersionSeparator + 1); @@ -109,6 +121,11 @@ public class BuildNumber implements Comparable<BuildNumber> { throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name); } + int minorBuildSeparator = code.indexOf('.'); // allow <BuildNumber>.<BuildAttemptNumber> skipping BuildAttemptNumber + if (minorBuildSeparator > 0) { + attemptInfo = code.substring(minorBuildSeparator + 1); + code = code.substring(0, minorBuildSeparator); + } buildNumber = parseBuildNumber(version, code, name); } else { @@ -116,13 +133,13 @@ public class BuildNumber implements Comparable<BuildNumber> { if (buildNumber <= 2000) { // it's probably a baseline, not a build number - return new BuildNumber(productCode, buildNumber, 0); + return new BuildNumber(productCode, buildNumber, 0, null); } baselineVersion = getBaseLineForHistoricBuilds(buildNumber); } - return new BuildNumber(productCode, baselineVersion, buildNumber); + return new BuildNumber(productCode, baselineVersion, buildNumber, attemptInfo); } private static int parseBuildNumber(String version, String code, String name) { @@ -188,6 +205,7 @@ public class BuildNumber implements Comparable<BuildNumber> { if (myBaselineVersion != that.myBaselineVersion) return false; if (myBuildNumber != that.myBuildNumber) return false; if (!myProductCode.equals(that.myProductCode)) return false; + if (!Comparing.equal(myAttemptInfo, that.myAttemptInfo)) return false; return true; } @@ -197,6 +215,7 @@ public class BuildNumber implements Comparable<BuildNumber> { int result = myProductCode.hashCode(); result = 31 * result + myBaselineVersion; result = 31 * result + myBuildNumber; + if (myAttemptInfo != null) result = 31 * result + myAttemptInfo.hashCode(); return result; } @@ -256,4 +275,8 @@ public class BuildNumber implements Comparable<BuildNumber> { public boolean isSnapshot() { return myBuildNumber == Integer.MAX_VALUE; } + + public String asStringWithAllDetails() { + return asString(true, true); + } } |