aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2020-06-17 00:24:23 +0200
committerGitHub <noreply@github.com>2020-06-17 00:24:23 +0200
commit1485a4192d6afee7dd5449d4a0e28ca184efd887 (patch)
tree895716eaa859a36174c3ec2db02464e6d3a375f0
parentd60a5b23ba6816c134218550c1d27cf4b3055554 (diff)
downloadplatform_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.sh7
-rw-r--r--.travis.yml1
-rw-r--r--org.jacoco.build/pom.xml14
-rw-r--r--org.jacoco.core.test.validation/pom.xml25
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java10
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java8
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java10
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java15
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java4
-rw-r--r--org.jacoco.doc/docroot/doc/changes.html2
10 files changed, 76 insertions, 20 deletions
diff --git a/.travis.sh b/.travis.sh
index 554c1011..7a62f0c6 100755
--- a/.travis.sh
+++ b/.travis.sh
@@ -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>