diff options
author | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2014-05-16 20:30:20 +0200 |
---|---|---|
committer | Marc R. Hoffmann <hoffmann@mountainminds.com> | 2014-05-19 20:38:00 +0200 |
commit | 310b7d14546c8f5e49f5e99475fb6001331ac4ca (patch) | |
tree | 8a75fe716d904754678f6a7ee7e0fe6a7df6eb1c /org.jacoco.agent.rt | |
parent | 1fadbfb9384433f00e409ab27328d147445c8d9f (diff) | |
download | jacoco-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.java | 17 |
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) && |