From b742bbd05da01820ff0bfe564d763ab97789abf9 Mon Sep 17 00:00:00 2001 From: "Marc R. Hoffmann" Date: Tue, 15 Dec 2020 07:43:47 +0100 Subject: [PATCH] Add experimental support for Java 17 class files (#1132) --- .azure-pipelines/azure-pipelines.yml | 2 ++ org.jacoco.build/pom.xml | 14 +++++++++++ org.jacoco.core.test.validation/pom.xml | 25 +++++++++++++++++++ .../jacoco/core/analysis/AnalyzerTest.java | 11 ++++---- .../jacoco/core/instr/InstrumenterTest.java | 8 +++--- .../core/internal/instr/InstrSupport.java | 2 +- org.jacoco.doc/docroot/doc/changes.html | 2 ++ 7 files changed, 54 insertions(+), 10 deletions(-) diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml index e6a4adcec9..eb063e8da2 100644 --- a/.azure-pipelines/azure-pipelines.yml +++ b/.azure-pipelines/azure-pipelines.yml @@ -29,6 +29,8 @@ jobs: JDK_VERSION: 15 JDK 16: JDK_VERSION: 16 + JDK 17: + JDK_VERSION: 17 pool: vmImage: 'ubuntu-18.04' steps: 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..c8714f4632 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