diff --git a/org.jacoco.build/pom.xml b/org.jacoco.build/pom.xml
index ced36c48da..07008522fd 100644
--- a/org.jacoco.build/pom.xml
+++ b/org.jacoco.build/pom.xml
@@ -865,6 +865,20 @@
+
+ java17-bytecode
+
+
+ bytecode.version
+ 17
+
+
+
+ 13
+ 13
+
+
+
ecj
diff --git a/org.jacoco.core.test.validation/pom.xml b/org.jacoco.core.test.validation/pom.xml
index badded685e..787d93d33d 100644
--- a/org.jacoco.core.test.validation/pom.xml
+++ b/org.jacoco.core.test.validation/pom.xml
@@ -257,6 +257,31 @@
../org.jacoco.core.test.validation.scala
+
+
+ java17-bytecode
+
+
+ bytecode.version
+ 17
+
+
+
+
+ 17
+ 17
+
+
+ ../org.jacoco.core.test.validation.kotlin
+ ../org.jacoco.core.test.validation.java7
+ ../org.jacoco.core.test.validation.java8
+ ../org.jacoco.core.test.validation.java14
+
+ ../org.jacoco.core.test.validation.scala
+
+
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
index 33d1ea5a11..16901d9401 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
@@ -23,8 +23,8 @@
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
-import java.io.InputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Collections;
@@ -33,6 +33,7 @@
import java.util.Map;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.jacoco.core.data.ExecutionDataStore;
@@ -130,14 +131,14 @@ private static byte[] createClass(final int version) {
*/
@Test
public void analyzeClass_should_throw_exception_for_unsupported_class_file_version() {
- final byte[] bytes = createClass(Opcodes.V16 + 1);
+ final byte[] bytes = createClass(Opcodes.V16 + 2);
try {
analyzer.analyzeClass(bytes, "UnsupportedVersion");
fail("exception expected");
} catch (IOException e) {
assertEquals("Error while analyzing UnsupportedVersion.",
e.getMessage());
- assertEquals("Unsupported class file major version 61",
+ assertEquals("Unsupported class file major version 62",
e.getCause().getMessage());
}
}
@@ -217,7 +218,7 @@ public void testAnalyzeClass_BrokenStream() throws IOException {
*/
@Test
public void analyzeAll_should_throw_exception_for_unsupported_class_file_version() {
- final byte[] bytes = createClass(Opcodes.V16 + 1);
+ final byte[] bytes = createClass(Opcodes.V16 + 2);
try {
analyzer.analyzeAll(new ByteArrayInputStream(bytes),
"UnsupportedVersion");
@@ -225,7 +226,7 @@ public void analyzeAll_should_throw_exception_for_unsupported_class_file_version
} catch (IOException e) {
assertEquals("Error while analyzing UnsupportedVersion.",
e.getMessage());
- assertEquals("Unsupported class file major version 61",
+ assertEquals("Unsupported class file major version 62",
e.getCause().getMessage());
}
}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
index b7500cb122..a3d224091f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
@@ -122,14 +122,14 @@ private static byte[] createClass(final int version) {
*/
@Test
public void instrument_should_throw_exception_for_unsupported_class_file_version() {
- final byte[] bytes = createClass(Opcodes.V16 + 1);
+ final byte[] bytes = createClass(Opcodes.V16 + 2);
try {
instrumenter.instrument(bytes, "UnsupportedVersion");
fail("exception expected");
} catch (final IOException e) {
assertEquals("Error while instrumenting UnsupportedVersion.",
e.getMessage());
- assertEquals("Unsupported class file major version 61",
+ assertEquals("Unsupported class file major version 62",
e.getCause().getMessage());
}
}
@@ -224,7 +224,7 @@ public void testSerialization() throws Exception {
*/
@Test
public void instrumentAll_should_throw_exception_for_unsupported_class_file_version() {
- final byte[] bytes = createClass(Opcodes.V16 + 1);
+ final byte[] bytes = createClass(Opcodes.V16 + 2);
try {
instrumenter.instrumentAll(new ByteArrayInputStream(bytes),
new ByteArrayOutputStream(), "UnsupportedVersion");
@@ -232,7 +232,7 @@ public void instrumentAll_should_throw_exception_for_unsupported_class_file_vers
} catch (final IOException e) {
assertEquals("Error while instrumenting UnsupportedVersion.",
e.getMessage());
- assertEquals("Unsupported class file major version 61",
+ assertEquals("Unsupported class file major version 62",
e.getCause().getMessage());
}
}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
index ce54815adc..d024be9b69 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
@@ -273,7 +273,7 @@ public static void push(final MethodVisitor mv, final int value) {
*/
public static ClassReader classReaderFor(final byte[] b) {
final int originalVersion = getMajorVersion(b);
- if (originalVersion == Opcodes.V16) {
+ if (originalVersion == Opcodes.V16 + 1) {
// temporarily downgrade version to bypass check in ASM
setMajorVersion(Opcodes.V16, b);
}
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index c160ab8c26..ac047356a2 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -25,6 +25,8 @@
New Features
JaCoCo now officially supports Java 15
(GitHub #1094,
#1097).
+ Experimental support for Java 17 class files
+ (GitHub #1132).
Non-functional Changes