diff options
Diffstat (limited to 'org.jacoco.core.test/src/org/jacoco/core/test')
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(); |