From af03dee866c4b50c8dec32c3d3bf6fe1970468d2 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Mon, 15 Jan 2018 10:22:28 +0100 Subject: [PATCH] [platform] adds comparison methods to Java version class --- .../com/intellij/util/lang/JavaVersion.java | 19 ++++++++++++++++++- .../com/intellij/util/lang/JavaVersionTest.kt | 10 +++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/platform/util/src/com/intellij/util/lang/JavaVersion.java b/platform/util/src/com/intellij/util/lang/JavaVersion.java index 45c84cc859be..beef9d2f3644 100644 --- a/platform/util/src/com/intellij/util/lang/JavaVersion.java +++ b/platform/util/src/com/intellij/util/lang/JavaVersion.java @@ -19,7 +19,7 @@ import java.util.List; * @see #parse(String) for examples of supported version strings * @since 2018.1 */ -public final class JavaVersion { +public final class JavaVersion implements Comparable { /** * The major version. * Corresponds to the first number of a Java 9+ version string and to the second number of Java 1.0 to 1.8 strings. @@ -58,6 +58,23 @@ public final class JavaVersion { this.ea = ea; } + @Override + public int compareTo(@NotNull JavaVersion o) { + int diff = feature - o.feature; + if (diff != 0) return diff; + diff = minor - o.minor; + if (diff != 0) return diff; + diff = update - o.update; + if (diff != 0) return diff; + diff = build - o.build; + if (diff != 0) return diff; + return (ea ? 0 : 1) - (o.ea ? 0 : 1); + } + + public boolean isAtLeast(int feature) { + return this.feature >= feature; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/platform/util/testSrc/com/intellij/util/lang/JavaVersionTest.kt b/platform/util/testSrc/com/intellij/util/lang/JavaVersionTest.kt index b0a9193c3561..5b60410e6e23 100644 --- a/platform/util/testSrc/com/intellij/util/lang/JavaVersionTest.kt +++ b/platform/util/testSrc/com/intellij/util/lang/JavaVersionTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. + * Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. */ package com.intellij.util.lang @@ -60,6 +60,14 @@ class JavaVersionTest { assertThat(current.build).isGreaterThan(0) } + @Test fun comparing() { + assertThat(JavaVersion.compose(9, 0, 0, 0, false)).isGreaterThan(JavaVersion.compose(8, 0, 0, 0, false)) + assertThat(JavaVersion.compose(8, 1, 0, 0, false)).isGreaterThan(JavaVersion.compose(8, 0, 0, 0, false)) + assertThat(JavaVersion.compose(8, 0, 1, 0, false)).isGreaterThan(JavaVersion.compose(8, 0, 0, 0, false)) + assertThat(JavaVersion.compose(8, 0, 0, 1, false)).isGreaterThan(JavaVersion.compose(8, 0, 0, 0, false)) + assertThat(JavaVersion.compose(8, 0, 0, 0, false)).isGreaterThan(JavaVersion.compose(8, 0, 0, 0, true)) + } + private fun doTest(versionString: String, feature: Int, minor: Int = 0,