aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.core.test/src/org/jacoco/core/test
diff options
context:
space:
mode:
Diffstat (limited to 'org.jacoco.core.test/src/org/jacoco/core/test')
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java40
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java5
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java4
-rw-r--r--org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java6
4 files changed, 26 insertions, 29 deletions
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
index cd001ce8..113019a6 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
@@ -14,30 +14,32 @@ package org.jacoco.core.test;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
/**
* Loads a single class from a byte array.
*/
public class TargetLoader extends ClassLoader {
- private final String sourcename;
+ private final Map<String, byte[]> classes;
- private final byte[] bytes;
+ public TargetLoader() {
+ super(TargetLoader.class.getClassLoader());
+ this.classes = new HashMap<String, byte[]>();
+ }
- private final Class<?> clazz;
+ public Class<?> add(final String name, final byte[] bytes) {
+ this.classes.put(name, bytes);
+ return load(name);
+ }
- public TargetLoader(final String name, final byte[] bytes) {
- super(TargetLoader.class.getClassLoader());
- this.sourcename = name;
- this.bytes = bytes;
- clazz = load(name);
+ public Class<?> add(final Class<?> name, final byte[] bytes) {
+ return add(name.getName(), bytes);
}
- public TargetLoader(final Class<?> source, final byte[] bytes) {
- super(TargetLoader.class.getClassLoader());
- this.sourcename = source.getName();
- this.bytes = bytes;
- clazz = load(source.getName());
+ public Class<?> add(final Class<?> source) throws IOException {
+ return add(source.getName(), getClassDataAsBytes(source));
}
private Class<?> load(final String sourcename) {
@@ -49,15 +51,6 @@ public class TargetLoader extends ClassLoader {
}
}
- public Class<?> getTargetClass() {
- return clazz;
- }
-
- public Object newTargetInstance() throws InstantiationException,
- IllegalAccessException {
- return clazz.newInstance();
- }
-
public static InputStream getClassData(Class<?> clazz) {
final String resource = "/" + clazz.getName().replace('.', '/')
+ ".class";
@@ -79,7 +72,8 @@ public class TargetLoader extends ClassLoader {
@Override
protected synchronized Class<?> loadClass(String name, boolean resolve)
throws ClassNotFoundException {
- if (sourcename.equals(name)) {
+ final byte[] bytes = classes.get(name);
+ if (bytes != null) {
Class<?> c = defineClass(name, bytes, 0, bytes.length);
if (resolve) {
resolveClass(c);
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
index 976b8231..055b24be 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
@@ -42,9 +42,10 @@ public class ExecuteInstrumentedCodeScenario extends TimedScenario {
runtime.startup(new RuntimeData());
final Instrumenter instr = new Instrumenter(runtime);
final byte[] instrumentedBuffer = instr.instrument(reader);
- final TargetLoader loader = new TargetLoader(target, instrumentedBuffer);
+ final TargetLoader loader = new TargetLoader();
- return (Callable<Void>) loader.newTargetInstance();
+ return (Callable<Void>) loader.add(target, instrumentedBuffer)
+ .newInstance();
}
@Override
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java
index a431f384..96ef9f28 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/CyclomaticComplexityTest.java
@@ -255,8 +255,8 @@ public class CyclomaticComplexityTest {
throws Exception {
reader = new ClassReader(TargetLoader.getClassData(clazz));
final byte[] bytes = new Instrumenter(runtime).instrument(reader);
- final TargetLoader loader = new TargetLoader(clazz, bytes);
- target = (Target) loader.getTargetClass().newInstance();
+ final TargetLoader loader = new TargetLoader();
+ target = (Target) loader.add(clazz, bytes).newInstance();
}
private ICounter analyze() {
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
index 626db9ff..6e24505d 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
@@ -55,12 +55,15 @@ public abstract class ValidationTestBase {
protected Source source;
+ protected TargetLoader loader;
+
protected ValidationTestBase(final Class<?> target) {
this.target = target;
}
@Before
public void setup() throws Exception {
+ loader = new TargetLoader();
final ClassReader reader = new ClassReader(
TargetLoader.getClassData(target));
final ExecutionDataStore store = execute(reader);
@@ -74,8 +77,7 @@ public abstract class ValidationTestBase {
IRuntime runtime = new SystemPropertiesRuntime();
runtime.startup(data);
final byte[] bytes = new Instrumenter(runtime).instrument(reader);
- final TargetLoader loader = new TargetLoader(target, bytes);
- run(loader.getTargetClass());
+ run(loader.add(target, bytes));
final ExecutionDataStore store = new ExecutionDataStore();
data.collect(store, new SessionInfoStore(), false);
runtime.shutdown();