From bf7eea9818cf1e01881e318703da26007d7ac3cc Mon Sep 17 00:00:00 2001 From: Sylwester Lachiewicz Date: Wed, 16 Sep 2026 01:35:19 +0200 Subject: [PATCH] Derive test expectations from the JDK feature version The javac and eclipse compiler tests listed the JDKs they knew (11, 17, 21, 25) by substring, so any other JDK fell back to Java 1.3 source settings or to expecting ReservedWord.class, and the suite failed on JDK 26 and 27. A shared getJavaFeatureVersion() replaces the lists. --- .../plexus/compiler/AbstractCompilerTest.java | 16 ++++ .../EclipseCompilerErrorsAsWarningsTest.java | 7 +- .../EclipseCompilerFailOnWarningsTest.java | 8 +- .../compiler/eclipse/EclipseCompilerTest.java | 8 +- .../javac/JavacErrorProneCompilerTest.java | 2 +- .../javac/AbstractJavacCompilerTest.java | 87 +++---------------- 6 files changed, 36 insertions(+), 92 deletions(-) diff --git a/plexus-compiler-test/src/main/java/org/codehaus/plexus/compiler/AbstractCompilerTest.java b/plexus-compiler-test/src/main/java/org/codehaus/plexus/compiler/AbstractCompilerTest.java index 026e0b4a0..1426caf24 100644 --- a/plexus-compiler-test/src/main/java/org/codehaus/plexus/compiler/AbstractCompilerTest.java +++ b/plexus-compiler-test/src/main/java/org/codehaus/plexus/compiler/AbstractCompilerTest.java @@ -310,4 +310,20 @@ protected String getJavaVersion() { return javaVersion; } + + /** + * Returns the feature version of the running JDK: 8 for {@code 1.8.x}, otherwise the leading number of + * {@code java.version}, such as 17 or 27. + */ + protected int getJavaFeatureVersion() { + String javaVersion = System.getProperty("java.version"); + if (javaVersion.startsWith("1.")) { + javaVersion = javaVersion.substring(2); + } + int end = 0; + while (end < javaVersion.length() && Character.isDigit(javaVersion.charAt(end))) { + end++; + } + return Integer.parseInt(javaVersion.substring(0, end)); + } } diff --git a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerErrorsAsWarningsTest.java b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerErrorsAsWarningsTest.java index 86e118d08..505c1bbe3 100644 --- a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerErrorsAsWarningsTest.java +++ b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerErrorsAsWarningsTest.java @@ -36,11 +36,8 @@ protected int expectedWarnings() { @Override protected Collection expectedOutputFiles() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + // assert is a keyword since Java 1.4, so ReservedWord does not compile on a modern source level + if (getJavaFeatureVersion() >= 9) { return Arrays.asList( "org/codehaus/foo/Deprecation.class", "org/codehaus/foo/ExternalDeps.class", diff --git a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerFailOnWarningsTest.java b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerFailOnWarningsTest.java index 6dc10e0cf..2058b38f0 100644 --- a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerFailOnWarningsTest.java +++ b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerFailOnWarningsTest.java @@ -29,12 +29,8 @@ protected int expectedWarnings() { @Override protected Collection expectedOutputFiles() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("9.0") - || javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + // assert is a keyword since Java 1.4, so ReservedWord does not compile on a modern source level + if (getJavaFeatureVersion() >= 9) { return Arrays.asList( "org/codehaus/foo/Deprecation.class", "org/codehaus/foo/ExternalDeps.class", diff --git a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerTest.java b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerTest.java index e8422d8e0..4082d7010 100644 --- a/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerTest.java +++ b/plexus-compilers/plexus-compiler-eclipse/src/test/java/org/codehaus/plexus/compiler/eclipse/EclipseCompilerTest.java @@ -62,12 +62,8 @@ protected int expectedWarnings() { @Override protected Collection expectedOutputFiles() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("9.0") - || javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + // assert is a keyword since Java 1.4, so ReservedWord does not compile on a modern source level + if (getJavaFeatureVersion() >= 9) { return Arrays.asList( "org/codehaus/foo/Deprecation.class", "org/codehaus/foo/ExternalDeps.class", diff --git a/plexus-compilers/plexus-compiler-javac-errorprone/src/test/java/org/codehaus/plexus/compiler/javac/JavacErrorProneCompilerTest.java b/plexus-compilers/plexus-compiler-javac-errorprone/src/test/java/org/codehaus/plexus/compiler/javac/JavacErrorProneCompilerTest.java index 553e06af6..aba9e12d1 100644 --- a/plexus-compilers/plexus-compiler-javac-errorprone/src/test/java/org/codehaus/plexus/compiler/javac/JavacErrorProneCompilerTest.java +++ b/plexus-compilers/plexus-compiler-javac-errorprone/src/test/java/org/codehaus/plexus/compiler/javac/JavacErrorProneCompilerTest.java @@ -17,7 +17,7 @@ protected int expectedWarnings() { String javaVersion = getJavaVersion(); if (javaVersion.startsWith("1.8")) { return 1; - } else if (Runtime.version().feature() >= 21) { + } else if (getJavaFeatureVersion() >= 21) { // javac 21 and later also warn that -source 8 and -target 8 are obsolete return 5; } diff --git a/plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/AbstractJavacCompilerTest.java b/plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/AbstractJavacCompilerTest.java index b6d3293a4..b3c6a4bf2 100644 --- a/plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/AbstractJavacCompilerTest.java +++ b/plexus-compilers/plexus-compiler-javac/src/test/java/org/codehaus/plexus/compiler/javac/AbstractJavacCompilerTest.java @@ -61,16 +61,12 @@ protected String getRoleHint() { @Override protected int expectedErrors() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + if (getJavaFeatureVersion() >= 11) { return 5; } // javac output changed for misspelled modifiers starting in 1.6...they now generate 2 errors per occurrence, // not one. - if ("1.5".compareTo(javaVersion) < 0) { + if ("1.5".compareTo(getJavaVersion()) < 0) { return 4; } else { return 3; @@ -79,103 +75,46 @@ protected int expectedErrors() { @Override protected int expectedWarnings() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + if (getJavaFeatureVersion() >= 11) { return 1; } + String javaVersion = getJavaVersion(); if (javaVersion.contains("1.8")) { // lots of new warnings about obsoletions for future releases return 30; } - if ("1.6".compareTo(javaVersion) < 0) { // with 1.7 some warning with bootstrap class path not set in conjunction with -source 1.3 return 9; } - return 2; } @Override public String getTargetVersion() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("9.0")) { + int javaFeatureVersion = getJavaFeatureVersion(); + if (javaFeatureVersion >= 11) { + return Integer.toString(javaFeatureVersion); + } else if (getJavaVersion().contains("9.0")) { return "1.7"; - } else if (javaVersion.contains("11")) { - return "11"; - } else if (javaVersion.contains("14")) { - return "14"; - } else if (javaVersion.contains("15")) { - return "15"; - } else if (javaVersion.contains("16")) { - return "16"; - } else if (javaVersion.contains("17")) { - return "17"; - } else if (javaVersion.contains("18")) { - return "18"; - } else if (javaVersion.contains("19")) { - return "19"; - } else if (javaVersion.contains("20")) { - return "20"; - } else if (javaVersion.contains("21")) { - return "21"; - } else if (javaVersion.contains("22")) { - return "22"; - } else if (javaVersion.contains("23")) { - return "23"; - } else if (javaVersion.contains("24")) { - return "24"; - } else if (javaVersion.contains("25")) { - return "25"; } return super.getTargetVersion(); } @Override public String getSourceVersion() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("9.0")) { + int javaFeatureVersion = getJavaFeatureVersion(); + if (javaFeatureVersion >= 11) { + return Integer.toString(javaFeatureVersion); + } else if (getJavaVersion().contains("9.0")) { return "1.7"; - } else if (javaVersion.contains("11")) { - return "11"; - } else if (javaVersion.contains("14")) { - return "14"; - } else if (javaVersion.contains("15")) { - return "15"; - } else if (javaVersion.contains("16")) { - return "16"; - } else if (javaVersion.contains("17")) { - return "17"; - } else if (javaVersion.contains("18")) { - return "18"; - } else if (javaVersion.contains("19")) { - return "19"; - } else if (javaVersion.contains("20")) { - return "20"; - } else if (javaVersion.contains("21")) { - return "21"; - } else if (javaVersion.contains("22")) { - return "22"; - } else if (javaVersion.contains("23")) { - return "23"; - } else if (javaVersion.contains("24")) { - return "24"; - } else if (javaVersion.contains("25")) { - return "25"; } return super.getSourceVersion(); } @Override protected Collection expectedOutputFiles() { - String javaVersion = getJavaVersion(); - if (javaVersion.contains("11") - || javaVersion.contains("17") - || javaVersion.contains("21") - || javaVersion.contains("25")) { + if (getJavaFeatureVersion() >= 11) { return Arrays.asList( "org/codehaus/foo/Deprecation.class", "org/codehaus/foo/ExternalDeps.class",