Always recreate the Agent instead of storing a singleton.
Fixes an issue where new classes were not included in coverage data when
added after an Agent has already been created.
Test: local testing
Bug: 203236809
Change-Id: I3928ff99a50e4a106749dc96f93d8472c74d4a70
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
index 45b7ccd..c4bf874 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
@@ -34,8 +34,6 @@
*/
public class Agent implements IAgent {
- private static Agent singleton;
-
/**
* Returns a global instance which is already started. If the method is
* called the first time the instance is created with the given options.
@@ -63,18 +61,15 @@
* @return global instance
*/
public static synchronized Agent getInstance(final AgentOptions options, RuntimeData data) {
- if (singleton == null) {
- final Agent agent = new Agent(options, IExceptionLogger.SYSTEM_ERR, data);
- agent.startup();
- Runtime.getRuntime().addShutdownHook(new Thread() {
- @Override
- public void run() {
- agent.shutdown();
- }
- });
- singleton = agent;
- }
- return singleton;
+ final Agent agent = new Agent(options, IExceptionLogger.SYSTEM_ERR, data);
+ agent.startup();
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ @Override
+ public void run() {
+ agent.shutdown();
+ }
+ });
+ return agent;
}
// END android-change
@@ -93,9 +88,8 @@
public static synchronized Agent getInstance() throws IllegalStateException {
// BEGIN android-change
// throw new IllegalStateException("JaCoCo agent not started.");
- singleton = Offline.createAgent();
+ return Offline.createAgent();
// END android-change
- return singleton;
}
private final AgentOptions options;