aboutsummaryrefslogtreecommitdiff
path: root/third_party/jacoco-make-probe-inserter-subclassable.patch
blob: 3885fa1f13029a53f348801822274e67910f09c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// SPDX-License-Identifier: EPL-2.0 and Apache-2.0
// These patches apply to JaCoCo (https://github.com/jacoco/jacoco) and are hereby made available under the terms of the
// Eclipse Public License 2.0 available at:
//   http://www.eclipse.org/legal/epl-2.0
diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
index 476c9e34..bc192dc6 100644
--- org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
+++ org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
@@ -24,6 +24,7 @@ import org.objectweb.asm.MethodVisitor;
 public class ClassInstrumenter extends ClassProbesVisitor {
 
 	private final IProbeArrayStrategy probeArrayStrategy;
+	private final IProbeInserterFactory probeInserterFactory;
 
 	private String className;
 
@@ -40,6 +41,22 @@ public class ClassInstrumenter extends ClassProbesVisitor {
 			final ClassVisitor cv) {
 		super(cv);
 		this.probeArrayStrategy = probeArrayStrategy;
+		this.probeInserterFactory = new IProbeInserterFactory() {
+			@Override
+			public ProbeInserter makeProbeInserter(int access, String name,
+					String desc, MethodVisitor mv,
+					IProbeArrayStrategy arrayStrategy) {
+				return new ProbeInserter(access, name, desc, mv, arrayStrategy);
+			}
+		};
+	}
+
+	public ClassInstrumenter(final IProbeArrayStrategy probeArrayStrategy,
+			final IProbeInserterFactory probeInserterFactory,
+			final ClassVisitor cv) {
+		super(cv);
+		this.probeArrayStrategy = probeArrayStrategy;
+		this.probeInserterFactory = probeInserterFactory;
 	}
 
 	@Override
@@ -71,8 +88,9 @@ public class ClassInstrumenter extends ClassProbesVisitor {
 			return null;
 		}
 		final MethodVisitor frameEliminator = new DuplicateFrameEliminator(mv);
-		final ProbeInserter probeVariableInserter = new ProbeInserter(access,
-				name, desc, frameEliminator, probeArrayStrategy);
+		final ProbeInserter probeVariableInserter =
+				probeInserterFactory.makeProbeInserter(access, name, desc,
+						frameEliminator, probeArrayStrategy);
 		return new MethodInstrumenter(probeVariableInserter,
 				probeVariableInserter);
 	}
diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java
new file mode 100644
index 00000000..19c2a7e2
--- /dev/null
+++ org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserterFactory.java
@@ -0,0 +1,8 @@
+package org.jacoco.core.internal.instr;
+
+import org.objectweb.asm.MethodVisitor;
+
+public interface IProbeInserterFactory {
+    ProbeInserter makeProbeInserter(int access, String name, String desc,
+            MethodVisitor mv, IProbeArrayStrategy arrayStrategy);
+}
diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
index 71808ac8..3df93f63 100644
--- org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+++ org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
@@ -78,7 +78,7 @@ public final class InstrSupport {
 	 * Data type of the field that stores coverage information for a class (
 	 * <code>boolean[]</code>).
 	 */
-	public static final String DATAFIELD_DESC = "[Z";
+	public static final String DATAFIELD_DESC = "java/nio/ByteBuffer";
 
 	// === Init Method ===
 
diff --git org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
index 0f5b99ff..ba5daa6d 100644
--- org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
+++ org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
@@ -25,7 +25,7 @@ import org.objectweb.asm.TypePath;
  * addition the probe array has to be retrieved at the beginning of the method
  * and stored in a local variable.
  */
-class ProbeInserter extends MethodVisitor implements IProbeInserter {
+public class ProbeInserter extends MethodVisitor implements IProbeInserter {
 
 	private final IProbeArrayStrategy arrayStrategy;
 
@@ -36,7 +36,7 @@ class ProbeInserter extends MethodVisitor implements IProbeInserter {
 	private final boolean clinit;
 
 	/** Position of the inserted variable. */
-	private final int variable;
+	protected final int variable;
 
 	/** Maximum stack usage of the code to access the probe array. */
 	private int accessorStackSize;
@@ -56,7 +56,7 @@ class ProbeInserter extends MethodVisitor implements IProbeInserter {
 	 *            callback to create the code that retrieves the reference to
 	 *            the probe array
 	 */
-	ProbeInserter(final int access, final String name, final String desc,
+	public ProbeInserter(final int access, final String name, final String desc,
 			final MethodVisitor mv, final IProbeArrayStrategy arrayStrategy) {
 		super(InstrSupport.ASM_API_VERSION, mv);
 		this.clinit = InstrSupport.CLINIT_NAME.equals(name);