aboutsummaryrefslogtreecommitdiff
path: root/third_party
diff options
context:
space:
mode:
authorFabian Meumertzheim <meumertzheim@code-intelligence.com>2021-04-20 08:22:08 +0200
committerFabian Meumertzheim <fabian@meumertzhe.im>2021-04-26 15:51:38 +0200
commitcb5f9ae4b8b32fc2b8057ed05bf5d5b8078d63e8 (patch)
tree2c678da6ba3773dd17003a6ad7bfa0eef3b8a2a7 /third_party
parent9e09f7c2c97bf45922c0ab8f5080f8f30e281ca1 (diff)
downloadjazzer-api-cb5f9ae4b8b32fc2b8057ed05bf5d5b8078d63e8.tar.gz
Refactor JaCoCo coverage instrumentation
In order to make our coverage information usable by the analyzer, probe events need to be emitted by the MethodProbesAdapter rather than the ProbeInserter. This commit moves the events to that class and simplifies the code in EdgeCoverageInstrumentor.
Diffstat (limited to 'third_party')
-rw-r--r--third_party/jacoco-make-probe-adapter-subclassable.patch91
1 files changed, 91 insertions, 0 deletions
diff --git a/third_party/jacoco-make-probe-adapter-subclassable.patch b/third_party/jacoco-make-probe-adapter-subclassable.patch
new file mode 100644
index 00000000..2d78a900
--- /dev/null
+++ b/third_party/jacoco-make-probe-adapter-subclassable.patch
@@ -0,0 +1,91 @@
+commit 93d0421590e59026c595090c468be0caa58a7948
+Author: Fabian Meumertzheim <meumertzheim@code-intelligence.com>
+Date: Tue Apr 20 08:06:09 2021 +0200
+
+ Updated Jazzer patch
+
+diff --git org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
+index 3ed19a88..f2b4f5d3 100644
+--- org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
++++ org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
+@@ -16,6 +16,7 @@ import org.jacoco.core.internal.instr.InstrSupport;
+ import org.objectweb.asm.ClassVisitor;
+ import org.objectweb.asm.MethodVisitor;
+ import org.objectweb.asm.commons.AnalyzerAdapter;
++import org.objectweb.asm.tree.MethodInsnNode;
+
+ /**
+ * A {@link org.objectweb.asm.ClassVisitor} that calculates probes for every
+@@ -28,6 +29,7 @@ public class ClassProbesAdapter extends ClassVisitor
+ };
+
+ private final ClassProbesVisitor cv;
++ private final IMethodProbesAdapterFactory methodProbesAdapterFactory;
+
+ private final boolean trackFrames;
+
+@@ -45,9 +47,21 @@ public class ClassProbesAdapter extends ClassVisitor
+ */
+ public ClassProbesAdapter(final ClassProbesVisitor cv,
+ final boolean trackFrames) {
++ this(cv, trackFrames, new IMethodProbesAdapterFactory() {
++ @Override
++ public MethodProbesAdapter makeMethodProbesAdapter(MethodProbesVisitor probesVisitor,
++ IProbeIdGenerator idGenerator) {
++ return new MethodProbesAdapter(probesVisitor, idGenerator);
++ }
++ });
++ }
++
++ public ClassProbesAdapter(final ClassProbesVisitor cv,
++ final boolean trackFrames, IMethodProbesAdapterFactory methodProbesAdapterFactory) {
+ super(InstrSupport.ASM_API_VERSION, cv);
+ this.cv = cv;
+ this.trackFrames = trackFrames;
++ this.methodProbesAdapterFactory = methodProbesAdapterFactory;
+ }
+
+ @Override
+@@ -79,8 +93,9 @@ public class ClassProbesAdapter extends ClassVisitor
+ public void visitEnd() {
+ super.visitEnd();
+ LabelFlowAnalyzer.markLabels(this);
+- final MethodProbesAdapter probesAdapter = new MethodProbesAdapter(
+- methodProbes, ClassProbesAdapter.this);
++ final MethodProbesAdapter probesAdapter =
++ methodProbesAdapterFactory.makeMethodProbesAdapter(
++ methodProbes, ClassProbesAdapter.this);
+ if (trackFrames) {
+ final AnalyzerAdapter analyzer = new AnalyzerAdapter(
+ ClassProbesAdapter.this.name, access, name, desc,
+diff --git org.jacoco.core/src/org/jacoco/core/internal/flow/IMethodProbesAdapterFactory.java org.jacoco.core/src/org/jacoco/core/internal/flow/IMethodProbesAdapterFactory.java
+new file mode 100644
+index 00000000..e939fa31
+--- /dev/null
++++ org.jacoco.core/src/org/jacoco/core/internal/flow/IMethodProbesAdapterFactory.java
+@@ -0,0 +1,8 @@
++package org.jacoco.core.internal.flow;
++
++import org.objectweb.asm.MethodVisitor;
++
++public interface IMethodProbesAdapterFactory {
++ MethodProbesAdapter makeMethodProbesAdapter(MethodProbesVisitor probesVisitor,
++ IProbeIdGenerator idGenerator);
++}
+\ No newline at end of file
+diff --git org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
+index 30253d02..e019a290 100644
+--- org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
++++ org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
+@@ -25,9 +25,9 @@ import org.objectweb.asm.commons.AnalyzerAdapter;
+ * Adapter that creates additional visitor events for probes to be inserted into
+ * a method.
+ */
+-public final class MethodProbesAdapter extends MethodVisitor {
++public class MethodProbesAdapter extends MethodVisitor {
+
+- private final MethodProbesVisitor probesVisitor;
++ protected final MethodProbesVisitor probesVisitor;
+
+ private final IProbeIdGenerator idGenerator;
+