aboutsummaryrefslogtreecommitdiff
path: root/org.jacoco.agent.rt
diff options
context:
space:
mode:
authorMarc R. Hoffmann <hoffmann@mountainminds.com>2014-05-16 20:30:20 +0200
committerMarc R. Hoffmann <hoffmann@mountainminds.com>2014-05-19 20:38:00 +0200
commit310b7d14546c8f5e49f5e99475fb6001331ac4ca (patch)
tree8a75fe716d904754678f6a7ee7e0fe6a7df6eb1c /org.jacoco.agent.rt
parent1fadbfb9384433f00e409ab27328d147445c8d9f (diff)
downloadjacoco-310b7d14546c8f5e49f5e99475fb6001331ac4ca.tar.gz
GitHub #49: New agent option includebootstrapclasses
New configuration option for the JaCoCo agent includebootstrapclasses to also instrument classes from the bootstrap class loader.
Diffstat (limited to 'org.jacoco.agent.rt')
-rw-r--r--org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
index 78d7b5e5..8b14a237 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
@@ -44,6 +44,8 @@ public class CoverageTransformer implements ClassFileTransformer {
private final ClassFileDumper classFileDumper;
+ private final boolean includeBootstrapClasses;
+
/**
* New transformer with the given delegates.
*
@@ -63,6 +65,7 @@ public class CoverageTransformer implements ClassFileTransformer {
excludes = new WildcardMatcher(toVMName(options.getExcludes()));
exclClassloader = new WildcardMatcher(options.getExclClassloader());
classFileDumper = new ClassFileDumper(options.getClassDumpDir());
+ includeBootstrapClasses = options.getIncludeBootstrapClasses();
}
public byte[] transform(final ClassLoader loader, final String classname,
@@ -102,12 +105,16 @@ public class CoverageTransformer implements ClassFileTransformer {
* @return <code>true</code> if the class should be instrumented
*/
protected boolean filter(final ClassLoader loader, final String classname) {
- // Don't instrument classes of the bootstrap loader:
- return loader != null &&
-
- !classname.startsWith(AGENT_PREFIX) &&
+ if (!includeBootstrapClasses) {
+ if (loader == null) {
+ return false;
+ }
+ if (exclClassloader.matches(loader.getClass().getName())) {
+ return false;
+ }
+ }
- !exclClassloader.matches(loader.getClass().getName()) &&
+ return !classname.startsWith(AGENT_PREFIX) &&
includes.matches(classname) &&