Index: org.jacoco.agent.rt/src/org/jacoco/agent/rt/CoverageTransformer.java
===================================================================
--- org.jacoco.agent.rt/src/org/jacoco/agent/rt/CoverageTransformer.java (revision 1612)
+++ org.jacoco.agent.rt/src/org/jacoco/agent/rt/CoverageTransformer.java (working copy)
@@ -44,6 +44,8 @@
private final WildcardMatcher exclClassloader;
+ private final boolean includeBootclasspath;
+
public CoverageTransformer(IRuntime runtime, AgentOptions options,
final IExceptionLogger logger) {
this.instrumenter = new Instrumenter(runtime);
@@ -52,6 +54,7 @@
includes = new WildcardMatcher(toWildcard(toVMName(options.getIncludes())));
excludes = new WildcardMatcher(toWildcard(toVMName(options.getExcludes())));
exclClassloader = new WildcardMatcher(toWildcard(options.getExclClassloader()));
+ includeBootclasspath = options.getIncludeBootclasspath();
}
public byte[] transform(ClassLoader loader, String classname,
@@ -81,14 +84,16 @@
* loader for the class
* @return true
if the class should be instrumented
*/
- protected boolean filter(ClassLoader loader, String classname) {
- // Don't instrument classes of the bootstrap loader:
- return loader != null &&
+ protected boolean filter(final ClassLoader loader, final String classname) {
+ if (loader == null) {
+ if (!includeBootclasspath) {
+ return false;
+ }
+ } else if (exclClassloader.matches(loader.getClass().getName())) {
+ return false;
+ }
+ return !classname.startsWith(AGENT_PREFIX) &&
- !classname.startsWith(AGENT_PREFIX) &&
-
- !exclClassloader.matches(loader.getClass().getName()) &&
-
includes.matches(classname) &&
!excludes.matches(classname);
Index: org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
===================================================================
--- org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java (revision 1612)
+++ org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java (working copy)
@@ -80,6 +80,8 @@
*/
public static final String DUMPONEXIT = "dumponexit";
+ public static final String INCLUDEBOOTCLASSPATH = "bootclasspath";
+
/**
* Specifies the output mode. Default is
* {@link OutputMode#file}
.
@@ -150,7 +152,7 @@
private static final Collection VALID_OPTIONS = Arrays.asList(
DESTFILE, APPEND, INCLUDES, EXCLUDES, EXCLCLASSLOADER, SESSIONID,
- DUMPONEXIT, OUTPUT, ADDRESS, PORT);
+ DUMPONEXIT, OUTPUT, ADDRESS, PORT, INCLUDEBOOTCLASSPATH);
private final Map options;
@@ -341,6 +343,14 @@
setOption(DUMPONEXIT, dumpOnExit);
}
+ public boolean getIncludeBootclasspath() {
+ return getOption(INCLUDEBOOTCLASSPATH, false);
+ }
+
+ public void setIncludeBootclasspath(final boolean includeBootclasspath) {
+ setOption(INCLUDEBOOTCLASSPATH, includeBootclasspath);
+ }
+
/**
* Returns the port on which to listen to when the output is
* tcpserver
or the port to connect to when output is