From fb4a7a4150410c16ade64ef3246e0f9e280cc76a Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Thu, 10 Nov 2022 14:04:04 -0800 Subject: [PATCH] Make class version logic more robust --- .../versionnumber/JavaSpecificationVersion.java | 15 +++++++++++++-- .../JavaSpecificationVersionTest.java | 4 ++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/jenkins/lib/versionnumber/JavaSpecificationVersion.java b/src/main/java/io/jenkins/lib/versionnumber/JavaSpecificationVersion.java index 884c19c..5017407 100644 --- a/src/main/java/io/jenkins/lib/versionnumber/JavaSpecificationVersion.java +++ b/src/main/java/io/jenkins/lib/versionnumber/JavaSpecificationVersion.java @@ -123,18 +123,29 @@ public int toReleaseVersion() { * * @param classVersion The class version; e.g., 52, 55, or 61. * @return The {@link JavaSpecificationVersion}; e.g., 1.8, 11, or 17. + * @throws IllegalArgumentException If the Java specification version for the given class version is unknown. */ public static JavaSpecificationVersion fromClassVersion(int classVersion) { - return fromReleaseVersion(CLASS_TO_RELEASE.get(classVersion)); + Integer releaseVersion = CLASS_TO_RELEASE.get(classVersion); + if (releaseVersion == null) { + throw new IllegalArgumentException("Unknown Java specification version for class version: " + classVersion); + } + return fromReleaseVersion(releaseVersion); } /** * Get the corresponding class file version. * * @return The class file version; e.g., 52, 55, or 61. + * @throws IllegalArgumentException If the class version for the given Java Specification Version is unknown. */ public int toClassVersion() { - return RELEASE_TO_CLASS.get(toReleaseVersion()); + int releaseVersion = toReleaseVersion(); + Integer classVersion = RELEASE_TO_CLASS.get(releaseVersion); + if (classVersion == null) { + throw new IllegalArgumentException("Unknown class version for release version: " + releaseVersion); + } + return classVersion; } @NonNull diff --git a/src/test/java/io/jenkins/lib/versionnumber/JavaSpecificationVersionTest.java b/src/test/java/io/jenkins/lib/versionnumber/JavaSpecificationVersionTest.java index d147ed4..3789edd 100644 --- a/src/test/java/io/jenkins/lib/versionnumber/JavaSpecificationVersionTest.java +++ b/src/test/java/io/jenkins/lib/versionnumber/JavaSpecificationVersionTest.java @@ -101,10 +101,14 @@ public void classVersion() { assertEquals(new JavaSpecificationVersion("1.8"), JavaSpecificationVersion.fromClassVersion(52)); assertEquals(new JavaSpecificationVersion("11"), JavaSpecificationVersion.fromClassVersion(55)); assertEquals(new JavaSpecificationVersion("17"), JavaSpecificationVersion.fromClassVersion(61)); + IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> JavaSpecificationVersion.fromClassVersion(1000)); + assertEquals("Unknown Java specification version for class version: 1000", e.getMessage()); assertEquals(52, new JavaSpecificationVersion("1.8").toClassVersion()); assertEquals(55, new JavaSpecificationVersion("11").toClassVersion()); assertEquals(61, new JavaSpecificationVersion("17").toClassVersion()); + e = assertThrows(IllegalArgumentException.class, () -> new JavaSpecificationVersion("1000").toClassVersion()); + assertEquals("Unknown class version for release version: 1000", e.getMessage()); } public void assertSpecEquals(JavaSpecificationVersion version, String value) {