[platform] accepts post-8 numbers in old Java version format

(e.g. "1.10" is a valid Javac target)
This commit is contained in:
Roman Shevchenko
2017-12-21 18:58:20 +01:00
parent 2ef60a41f9
commit f2fe14d146
2 changed files with 5 additions and 2 deletions
@@ -130,6 +130,8 @@ public final class JavaVersion {
return current;
}
private static final int MAX_ACCEPTED_VERSION = 25; // sanity check
/**
* <p>Parses a Java version string.</p>
*
@@ -170,7 +172,7 @@ public final class JavaVersion {
int feature = Integer.parseInt(numbers.get(0)), minor = 0, update = 0, build = 0;
boolean ea = false;
if (feature > 8 && feature < 50 /*sanity check*/) {
if (feature > 8 && feature < MAX_ACCEPTED_VERSION) {
// Java 9+
p = 1;
while (p < separators.size() && ".".equals(separators.get(p))) p++;
@@ -196,7 +198,7 @@ public final class JavaVersion {
else if (feature == 1 && numbers.size() > 1 && separators.size() > 1 && ".".equals(separators.get(1))) {
// Java 1.0 .. 1.8
feature = Integer.parseInt(numbers.get(1));
if (feature <= 8) {
if (feature <= MAX_ACCEPTED_VERSION) {
if (numbers.size() > 2 && separators.size() > 2 && ".".equals(separators.get(2))) {
minor = Integer.parseInt(numbers.get(2));
if (numbers.size() > 3 && separators.size() > 3 && "_".equals(separators.get(3))) {
@@ -23,6 +23,7 @@ class JavaVersionTest {
@Test fun `1_8_0_45-internal`() = doTest("1.8.0_45-internal", 8, 0, 45, 0, true)
@Test fun `1_8_0_121-2-whatever-b11`() = doTest("1.8.0_121-2-whatever-b11", 8, 0, 121, 11)
@Test fun `1_8_0_121-(big-number)-b11`() = doTest("1.8.0_121-99${Long.MAX_VALUE}-b11", 8, 0, 121, 11)
@Test fun `1_10`() = doTest("1.10", 10)
@Test fun `9`() = doTest("9", 9)
@Test fun `9-ea`() = doTest("9-ea", 9, 0, 0, 0, true)