aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core/src/org/jacoco/core/internal
diff options
context:
space:
mode:
authorEvgeny Mandrikov <138671+Godin@users.noreply.github.com>2019-01-22 23:23:48 +0100
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2019-01-22 23:23:48 +0100
commit2034d40ee2172339f33229f057d15b2b4e7aae29 (patch)
tree53df4f9b9b2b38ec208abfe7a59c3c3a1631357d /org.jacoco.core/src/org/jacoco/core/internal
parentb7441f2b51b3d147554845710c809e5a562dc36f (diff)
downloadjacoco-2034d40ee2172339f33229f057d15b2b4e7aae29.tar.gz
Add experimental support for Java 13 class files (#835)
Diffstat (limited to 'org.jacoco.core/src/org/jacoco/core/internal')
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java2
-rw-r--r--org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java22
2 files changed, 24 insertions, 0 deletions
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
index 1d7617ee..74574ecc 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
@@ -88,6 +88,8 @@ public class ContentTypeDetector {
case Opcodes.V11 | Opcodes.V_PREVIEW:
case Opcodes.V12:
case Opcodes.V12 | Opcodes.V_PREVIEW:
+ case (Opcodes.V12 + 1):
+ case (Opcodes.V12 + 1) | Opcodes.V_PREVIEW:
return CLASSFILE;
}
}
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 ce4bcbee..99e00270 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
@@ -13,6 +13,7 @@ package org.jacoco.core.internal.instr;
import static java.lang.String.format;
+import org.objectweb.asm.ClassReader;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
@@ -227,4 +228,25 @@ public final class InstrSupport {
}
}
+ /**
+ * Creates a {@link ClassReader} instance for given bytes of class even if
+ * its version not yet supported by ASM.
+ *
+ * @param b
+ * bytes of class
+ * @return {@link ClassReader}
+ */
+ public static ClassReader classReaderFor(final byte[] b) {
+ final byte[] originalVersion = new byte[] { b[4], b[5], b[6], b[7] };
+ if (getVersionMajor(b) == Opcodes.V12 + 1) {
+ b[4] = (byte) (Opcodes.V12 >>> 24);
+ b[5] = (byte) (Opcodes.V12 >>> 16);
+ b[6] = (byte) (Opcodes.V12 >>> 8);
+ b[7] = (byte) Opcodes.V12;
+ }
+ final ClassReader classReader = new ClassReader(b);
+ System.arraycopy(originalVersion, 0, b, 4, originalVersion.length);
+ return classReader;
+ }
+
}