diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2020-06-17 00:24:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-17 00:24:23 +0200 |
commit | 1485a4192d6afee7dd5449d4a0e28ca184efd887 (patch) | |
tree | 895716eaa859a36174c3ec2db02464e6d3a375f0 | |
parent | d60a5b23ba6816c134218550c1d27cf4b3055554 (diff) | |
download | platform_external_jacoco-1485a4192d6afee7dd5449d4a0e28ca184efd887.tar.gz platform_external_jacoco-1485a4192d6afee7dd5449d4a0e28ca184efd887.tar.bz2 platform_external_jacoco-1485a4192d6afee7dd5449d4a0e28ca184efd887.zip |
Add experimental support for Java 16 (#1059)
-rwxr-xr-x | .travis.sh | 7 | ||||
-rw-r--r-- | .travis.yml | 1 | ||||
-rw-r--r-- | org.jacoco.build/pom.xml | 14 | ||||
-rw-r--r-- | org.jacoco.core.test.validation/pom.xml | 25 | ||||
-rw-r--r-- | org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java | 10 | ||||
-rw-r--r-- | org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java | 8 | ||||
-rw-r--r-- | org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java | 10 | ||||
-rw-r--r-- | org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java | 15 | ||||
-rw-r--r-- | org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java | 4 | ||||
-rw-r--r-- | org.jacoco.doc/docroot/doc/changes.html | 2 |
10 files changed, 76 insertions, 20 deletions
@@ -75,6 +75,9 @@ case "$JDK" in 15-ea) install_jdk $JDK15_EA_URL ;; +16-ea) + install_jdk $JDK16_EA_URL + ;; esac # Do not use "~/.mavenrc" set by Travis (https://github.com/travis-ci/travis-ci/issues/3893), @@ -110,6 +113,10 @@ case "$JDK" in mvn -V -B -e verify -Dbytecode.version=15 \ --settings=./.travis/settings.xml ;; +16-ea) + mvn -V -B -e verify -Dbytecode.version=16 \ + --settings=./.travis/settings.xml + ;; *) echo "Incorrect JDK [$JDK]" exit 1; diff --git a/.travis.yml b/.travis.yml index 977b07d6..78a2be9c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,5 +31,6 @@ env: - JDK=13 - JDK=14 - JDK=15-ea + - JDK=16-ea script: ./.travis.sh diff --git a/org.jacoco.build/pom.xml b/org.jacoco.build/pom.xml index afc868fb..2a9a6c01 100644 --- a/org.jacoco.build/pom.xml +++ b/org.jacoco.build/pom.xml @@ -841,6 +841,20 @@ </properties> </profile> + <profile> + <id>java16-bytecode</id> + <activation> + <property> + <name>bytecode.version</name> + <value>16</value> + </property> + </activation> + <properties> + <maven.compiler.source>13</maven.compiler.source> + <maven.compiler.target>13</maven.compiler.target> + </properties> + </profile> + <!-- This profile enables use of ECJ --> <profile> <id>ecj</id> diff --git a/org.jacoco.core.test.validation/pom.xml b/org.jacoco.core.test.validation/pom.xml index 1aa6a207..09a7f7ae 100644 --- a/org.jacoco.core.test.validation/pom.xml +++ b/org.jacoco.core.test.validation/pom.xml @@ -246,6 +246,31 @@ <module>../org.jacoco.core.test.validation.scala</module> </modules> </profile> + + <profile> + <id>java16-bytecode</id> + <activation> + <property> + <name>bytecode.version</name> + <value>16</value> + </property> + </activation> + <properties> + <!-- see respective profile in org.jacoco.build about this override --> + <maven.compiler.source>16</maven.compiler.source> + <maven.compiler.target>16</maven.compiler.target> + </properties> + <modules> + <module>../org.jacoco.core.test.validation.kotlin</module> + <module>../org.jacoco.core.test.validation.java7</module> + <module>../org.jacoco.core.test.validation.java8</module> + <module>../org.jacoco.core.test.validation.java14</module> + <!-- Groovy 2.5.8 doesn't support bytecode version 16 + <module>../org.jacoco.core.test.validation.groovy</module> + --> + <module>../org.jacoco.core.test.validation.scala</module> + </modules> + </profile> </profiles> </project> 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 9fc20df3..120ddb92 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 @@ -107,7 +107,7 @@ public class AnalyzerTest { @Test public void should_not_modify_class_bytes_to_support_next_version() throws Exception { - final byte[] originalBytes = createClass(Opcodes.V14 + 1); + final byte[] originalBytes = createClass(Opcodes.V15 + 1); final byte[] bytes = new byte[originalBytes.length]; System.arraycopy(originalBytes, 0, bytes, 0, originalBytes.length); final long expectedClassId = CRC64.classId(bytes); @@ -130,14 +130,14 @@ public class AnalyzerTest { */ @Test public void analyzeClass_should_throw_exception_for_unsupported_class_file_version() { - final byte[] bytes = createClass(Opcodes.V14 + 2); + final byte[] bytes = createClass(Opcodes.V15 + 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 60", + assertEquals("Unsupported class file major version 61", e.getCause().getMessage()); } } @@ -217,7 +217,7 @@ public class AnalyzerTest { */ @Test public void analyzeAll_should_throw_exception_for_unsupported_class_file_version() { - final byte[] bytes = createClass(Opcodes.V14 + 2); + final byte[] bytes = createClass(Opcodes.V15 + 2); try { analyzer.analyzeAll(new ByteArrayInputStream(bytes), "UnsupportedVersion"); @@ -225,7 +225,7 @@ public class AnalyzerTest { } catch (IOException e) { assertEquals("Error while analyzing UnsupportedVersion.", e.getMessage()); - assertEquals("Unsupported class file major version 60", + assertEquals("Unsupported class file major version 61", e.getCause().getMessage()); } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java index b735b467..f1d21db2 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java @@ -29,6 +29,7 @@ import static org.objectweb.asm.Opcodes.V11; import static org.objectweb.asm.Opcodes.V12; import static org.objectweb.asm.Opcodes.V13; import static org.objectweb.asm.Opcodes.V14; +import static org.objectweb.asm.Opcodes.V15; import static org.objectweb.asm.Opcodes.V1_1; import static org.objectweb.asm.Opcodes.V1_2; import static org.objectweb.asm.Opcodes.V1_3; @@ -129,7 +130,12 @@ public class ClassFileVersionsTest { @Test public void test_15() throws IOException { - testVersion(V14 + 1, true); + testVersion(V15, true); + } + + @Test + public void test_16() throws IOException { + testVersion(V15 + 1, true); } private void testVersion(int version, boolean frames) throws IOException { 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 b2d27a97..5d29429a 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 @@ -99,7 +99,7 @@ public class InstrumenterTest { @Test public void should_not_modify_class_bytes_to_support_next_version() throws Exception { - final byte[] originalBytes = createClass(Opcodes.V14 + 1); + final byte[] originalBytes = createClass(Opcodes.V15 + 1); final byte[] bytes = new byte[originalBytes.length]; System.arraycopy(originalBytes, 0, bytes, 0, originalBytes.length); final long expectedClassId = CRC64.classId(bytes); @@ -122,14 +122,14 @@ public class InstrumenterTest { */ @Test public void instrument_should_throw_exception_for_unsupported_class_file_version() { - final byte[] bytes = createClass(Opcodes.V14 + 2); + final byte[] bytes = createClass(Opcodes.V15 + 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 60", + assertEquals("Unsupported class file major version 61", e.getCause().getMessage()); } } @@ -224,7 +224,7 @@ public class InstrumenterTest { */ @Test public void instrumentAll_should_throw_exception_for_unsupported_class_file_version() { - final byte[] bytes = createClass(Opcodes.V14 + 2); + final byte[] bytes = createClass(Opcodes.V15 + 2); try { instrumenter.instrumentAll(new ByteArrayInputStream(bytes), new ByteArrayOutputStream(), "UnsupportedVersion"); @@ -232,7 +232,7 @@ public class InstrumenterTest { } catch (final IOException e) { assertEquals("Error while instrumenting UnsupportedVersion.", e.getMessage()); - assertEquals("Unsupported class file major version 60", + assertEquals("Unsupported class file major version 61", e.getCause().getMessage()); } } diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java index 924e61be..b6ddb293 100644 --- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java +++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java @@ -43,8 +43,8 @@ public class InstrSupportTest { } @Test - public void classReaderFor_should_read_java_15_class() { - final byte[] bytes = createJava15Class(); + public void classReaderFor_should_read_java_16_class() { + final byte[] bytes = createJava16Class(); final ClassReader classReader = InstrSupport.classReaderFor(bytes); @@ -53,16 +53,16 @@ public class InstrSupportTest { public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) { - assertEquals(Opcodes.V14 + 1, version); + assertEquals(Opcodes.V15 + 1, version); } }, 0); - assertArrayEquals(createJava15Class(), bytes); + assertArrayEquals(createJava16Class(), bytes); } - private static byte[] createJava15Class() { + private static byte[] createJava16Class() { final ClassWriter cw = new ClassWriter(0); - cw.visit(Opcodes.V14 + 1, 0, "Foo", null, "java/lang/Object", null); + cw.visit(Opcodes.V15 + 1, 0, "Foo", null, "java/lang/Object", null); cw.visitEnd(); return cw.toByteArray(); } @@ -126,7 +126,8 @@ public class InstrSupportTest { assertTrue(InstrSupport.needsFrames(Opcodes.V12)); assertTrue(InstrSupport.needsFrames(Opcodes.V13)); assertTrue(InstrSupport.needsFrames(Opcodes.V14)); - assertTrue(InstrSupport.needsFrames(Opcodes.V14 + 1)); + assertTrue(InstrSupport.needsFrames(Opcodes.V15)); + assertTrue(InstrSupport.needsFrames(Opcodes.V15 + 1)); assertTrue(InstrSupport.needsFrames(0x0100)); } 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 351ad523..bf91e6d0 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,9 +273,9 @@ public final class InstrSupport { */ public static ClassReader classReaderFor(final byte[] b) { final int originalVersion = getMajorVersion(b); - if (originalVersion == Opcodes.V14 + 1) { + if (originalVersion == Opcodes.V15 + 1) { // temporarily downgrade version to bypass check in ASM - setMajorVersion(Opcodes.V14, b); + setMajorVersion(Opcodes.V15, b); } final ClassReader classReader = new ClassReader(b); setMajorVersion(originalVersion, b); diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html index 2492aacc..2c7d640b 100644 --- a/org.jacoco.doc/docroot/doc/changes.html +++ b/org.jacoco.doc/docroot/doc/changes.html @@ -25,6 +25,8 @@ <li>JaCoCo now officially supports Java 14.</li> <li>Experimental support for Java 15 class files (GitHub <a href="https://github.com/jacoco/jacoco/issues/992">#992</a>).</li> + <li>Experimental support for Java 16 class files + (GitHub <a href="https://github.com/jacoco/jacoco/issues/1059">#1059</a>).</li> <li>Methods <code>toString</code>, <code>hashCode</code> and <code>equals</code> generated by compiler for records are filtered out during generation of report (GitHub <a href="https://github.com/jacoco/jacoco/issues/990">#990</a>).</li> |